проблема при создании запроса MySQL (последний на элемент) - PullRequest
0 голосов
/ 08 марта 2009

У меня есть сайт, где пользователи могут комментировать фотографии. У меня есть таблица комментариев в этом формате:

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(12) | NO   |     | NULL    |       |
| id       | varchar(32) | NO   | MUL | NULL    |       |
| whenadd  | int(20)     | NO   |     | NULL    |       |
| text     | text        | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+

И таблица фотографий в этом формате: (ТОЛЬКО ДЛЯ УТОЧНЕНИЯ, идентификатор относится к идентификатору в таблице фотографий, это сокращенно)

+----------+------------------+------+-----+---------+-------+
| Field    | Type             | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| id       | varchar(32)      | NO   | PRI | NULL    |       |
| type     | varchar(5)       | NO   |     | NULL    |       |
+----------+------------------+------+-----+---------+-------+

Так что, в основном, я пытаюсь вернуть фотографии, которые были прокомментированы, в дату, в которую они были прокомментированы, упорядоченные по последнему комментарию к каждой фотографии. Я пытался использовать INNER JOIN, чтобы сделать это, но это никогда не работает правильно. Есть идеи?

Ответы [ 4 ]

2 голосов
/ 09 марта 2009

лучше добавить столбец lastCommentDate в таблицу фотографий и заполнять его каждый раз, когда кто-то оставляет комментарий.

Он будет выполняться быстрее, чем каждый раз загружать такой запрос.

0 голосов
/ 08 марта 2009

select p.id, p.type, max(c.whenadd) from photos p, comments c where p.id = c.photo_id group by photo.id order by c.whenadd desc - возвращаются только комментарии с комментариями. Используйте левое соединение, чтобы вернуть все фотографии. Но, похоже, между этими двумя таблицами нет внешнего ключа. Комментарии к таблице должны иметь столбец photo_id (или что-то подобное) для ссылки на соответствующую фотографию в таблице photo.

0 голосов
/ 08 марта 2009

Вопрос немного неясен для меня - фотографии, которые были прокомментированы в день, когда они были прокомментированы - это похоже на каждую фотографию. Не стесняйтесь уточнить это.

Если вы хотите, чтобы фотографии сортировались по последнему комментарию, я бы сделал:

SELECT
  photo.id,
  MAX(c.whenadd) as last -- and maybe other fileds as well --
FROM
  photos photo LEFT JOIN comments c ON c.id=photo.id
GROUP BY
  photo.id
ORDER BY last DESC

Обратите внимание, что существует проблема с фотографиями, у которых нет комментариев - они будут отсортированы в последнюю очередь (я думаю), поскольку MAX (пустой набор) равен NULL.

Если вы хотите, чтобы фотографии, которые были прокомментированы в определенный день, отсортированы по последнему комментарию, просто добавьте еще одно объединение:

SELECT
  photo.id,
  MAX(c.whenadd) as last -- and maybe other fileds as well --
FROM
  photos photo NATURAL JOIN comments c NATURAL JOIN comments c2
WHERE
  c2.whenadd = yourspecialdate
GROUP BY
  photo.id
ORDER BY last DESC
0 голосов
/ 08 марта 2009

ВЫБРАТЬ * ИЗ КОММЕНТАРИЙ ВЛЕВО СОЕДИНЯЕТ фотографии ПО комментариям.

сменить ФОТОИД на свою фотографию ID

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...