我的查询:
SELECT issues.*,
comments.author AS commentauthor,
comments.when_posted AS commentposted
FROM issues
LEFT JOIN (SELECT *
FROM comments
ORDER BY when_posted DESC
LIMIT 1) AS comments ON issues.id=comments.issue
ORDER BY IFNULL(commentposted, issues.when_opened) DESC
我的问题是第三行的“LIMIT 1”。这将所有评论仅限于最新评论,因此只有最新评论的问题才会被报告为评论。
如果我从那里删除了“LIMIT 1”部分,我会在一个问题的每个评论中找到一行,这不是我想要的。我想要的只是每个问题的最新评论。
无论如何,我不确定我的IFNULL部分是否正常工作,因为那不是我在调试的地方。
那么我如何实现我的目标呢?
答案 0 :(得分:3)
尝试:
SELECT i.*,
c.author AS commentauthor,
c.when_posted AS commentposted
FROM ISSUES i
LEFT JOIN COMMENTS c ON c.issue = i.id
JOIN (SELECT c.issue,
MAX(c.when_posted) 'max_when_posted'
FROM COMMENTS c
GROUP BY c.issue) mwp ON mwp.issue = c.issue
AND mwp.max_when_posted = c.when_posted
ORDER BY COALESCE(c.when_posted, i.when_opened) DESC
答案 1 :(得分:2)
SELECT issues.*,
comments.author AS commentauthor,
comments.when_posted AS commentposted
FROM issues
LEFT JOIN ( SELECT c1.issue, c1.author, c1.when_posted
FROM comments c1
JOIN
(SELECT c2.issue, max(c2.when_posted) AS max_when_posted
FROM comments c2
GROUP BY issue) c3
on c1.issue = c3.issue and c1.when_posted = c3.max_when_posted
) AS comments ON issues.id=comments.issue
ORDER BY COALESCE(commentposted, issues.when_opened) DESC
答案 2 :(得分:0)
修改强>
由于MySql毕竟没有CTE,试试这个:
SELECT i.*
c.author AS CommentAuthor,
c.when_posted AS CommentPosted
FROM Issues i
LEFT JOIN
(SELECT issue, MAX(when_posted) AS LastPostDate
FROM comments GROUP BY issue) ic ON ic.issue = i.id
LEFT JOIN Comment c ON c.issue = i.id AND c.when_posted = ic.LastPostDate
ORDER BY COALESCE(ic.LastPostDate, issues.when_opened) DESC