2016-06-12 13 views
1

Итак, у меня есть две таблицы, у каждого есть все данные, а у других есть список комментариев, и мне нужно загрузить последний комментарий для каждой строки в таблице данных. Вот как это выглядитSQL - вернуть последний комментарий для каждой строки

Таблица: queries

id | name  | 
-------------------- 
1  | John Doe | 
2  | Jane Doe | 
3  | Alex Smith | 

Таблица: messages

id | queriesId | comment  | dateAdded   | 
-------------------------------------------------------- 
1  | 1   | Comment 1 | 2016-06-12 15:00:08 | 
2  | 1   | Commetn 2 | 2016-06-12 15:01:08 | 
3  | 2   | Comment 3 | 2016-06-12 15:05:35 | 
4  | 2   | Comment 4 | 2016-06-12 15:06:35 | 

Я хочу, чтобы результаты, чтобы посмотреть, как этот

id | name  | comment  | dateAdded   | 
-------------------------------------------------------- 
1  | John Doe | Commetn 2 | 2016-06-12 15:01:08 | 
2  | Jane Doe | Comment 4 | 2016-06-12 15:06:35 | 
3  | Alex Smith | Null  | Null    | 

Я попробовал этот код

SELECT 
    a.*, 
    b.comment, 
    b.LastComment 
FROM 
    queries a 
LEFT JOIN 
    (
    SELECT 
    `comment`, 
    MAX(dateAdded) LastComment, 
     queriesid 
    FROM 
    messages 
    GROUP BY 
    queriesid 
) b ON a.id = b.queriesid 
GROUP BY 
    a.id 

но результат я получаю это

id | name  | comment  | dateAdded   | 
-------------------------------------------------------- 
1  | John Doe | Commetn 1 | 2016-06-12 15:01:08 | 
2  | Jane Doe | Comment 3 | 2016-06-12 15:06:35 | 
3  | Alex Smith | Null  | Null    | 

Так единственная проблема заключается комментарий первая запись, а не один, соответствующий со значением столбца даты и времени. Я пробовал много изменений, но, похоже, он не работает. Я уверен, что это крошечная настройка от работы, но я не могу ее найти.

Любые идеи?

+0

который DBMS вы используете? mysql или sql-сервер? –

+0

Обратные тики на '\' comment \ '' выглядят как MySQL. –

+0

Извините, не нужно было выбирать оба тега, это mysql – VeeK

ответ

2

Выберите максимальную дату и queryId в подзапросе, как и вы. Затем снова присоединитесь к сообщениям о дате и идентификаторе, чтобы получить комментарий.

редактировать: Как это

SELECT 
    a.*, 
    b.LastComment, 
    comment.comment 
FROM 
    queries a 
LEFT JOIN 
    (
    SELECT 
    MAX(messages.dateAdded) LastComment, 
    messages.queriesid 
    FROM 
    messages 
GROUP BY 
    queriesid 
) b ON a.id = b.queriesid 
LEFT JOIN messages AS comment 
    ON comment.dateAdded = b.LastComment 
    AND comment.queriesid = b.queriesid 
GROUP BY 
    a.id 
+0

Не могли бы вы показать пример? Я новичок в mysql, как мне присоединиться к этой таблице? И я видел отмеченный повторяющийся ответ, но это совсем другое, поскольку это только для одной таблицы. – VeeK

+0

отредактировал мой ответ :) – Philipp

+0

Я вижу, что вы там делали. Brilliant. Спасибо, куча – VeeK

Смежные вопросы