所以我有两个表,一个包含所有数据,另一个包含注释列表,我需要为数据表中的每一行加载最新注释。这是它的样子
表: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 |
所以唯一的问题是comment是第一个条目,而不是与datetime列值对应的条目。我尝试了很多改动,但它似乎没有起作用。我确信这是一个微小的调整远离工作,但我似乎无法找到它。
有什么想法吗?
答案 0 :(得分:2)
选择子查询中的最大日期和queryId,就像您一样。然后再次加入关于日期和id的消息以获得评论。
编辑:像这样
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