отдельные записи, основанные на самой последней версии - PullRequest
1 голос
/ 22 февраля 2012

Я перечисляю комментарии для записи, и я разрешаю пользователю редактировать существующие комментарии, и он отслеживает эти изменения.

Структура таблицы:

комментарии: id, сводка

revisions: comment_id, revision_id, timestamp

revisions.comment_id = comments.id

revisions.revision_id = идентификатор нового комментария, дальнейшее объяснение: когда они выбирают существующий комментарий, онотобразит форму редактирования, и они могут ввести новый комментарий и отправить его.Он вставит его в таблицу комментариев в качестве нового комментария, возьмет последний идентификатор из этой таблицы и установит его как revision_id в таблице ревизий.

Я хочу сделать отдельный выбор в таблице ревизий (чтобы получитьмножественный comment_id, revision_id в массив, который будет использоваться в приложении):

например:

select distinct comment_id from revisions

Но можно ли выбрать соответствующую запись на основе самого последнего комментария (ревизии.timestamp)?

в теории:

выбрать отличительный комментарий_ид из ревизий. ГДЕ отметка времени - САМАЯ БОЛЬШАЯ

пример таблицы ревизий:

comment_id   revision_id   timestamp
         2            12   20120222180000
         2            13   20120222170000
         5            18   20120222190000
         5            19   20120222200000

В этомВ качестве примера из 4 строк я бы хотел, чтобы запрос возвратил две строки,

:

comment_id = 2, revision_id = 12 timestamp = 20120222180000

и

comment_id = 5, revision_id = 19 timestamp = 20120222200000

ОБНОВЛЕНИЕ: похоже, это помогает, но, пожалуйста, дайте мне знать, если есть лучший способ

SELECT 
 distinct comment_id, max(timestamp)
FROM
 revisions 
GROUP BY
 comment_id

ОБНОВЛЕНИЕ: Я всеo необходимо включить revision_id, приведенный выше запрос включает только comment_id и отметку времени

Это было сделано:

SELECT 
 distinct a.comment_id as comment_id, 
 a.revision_id revision_id,
 a.timestamp as timestamp
FROM
 REVISIONS a 
WHERE
 a.timestamp = ( 
 SELECT
  max(b.timestamp)
 FROM
  revisions b
 WHERE
  b.comment_id = a.comment_id
)

1 Ответ

0 голосов
/ 22 февраля 2012

Если я вас правильно понимаю, вы просто сортируете по убыванию по отметке времени и берете первый результат.

SELECT comment_id FROM revisions ORDER BY timestamp DESC LIMIT 0,1

Редактировать: Я думаю, что теперь я понимаю, что вы действительно хотите, попробуйте это:

SELECT * FROM revisions GROUP BY comment_id ORDER BY timestamp DESC  
...