[英]How to sort records by most recent records in other table
我正在尝试按最近的活动(评论)对语句进行排序。 但是,如果一条语句没有注释,则下面的查询不会在末尾显示该语句。 如何更改查询,以便最后显示并显示没有注释的语句?
SELECT
`statements`.`id`,
`statement`,
`statements`.`timestamp`,
`statements`.`published`,
`image`,
`statements`.`author_id`,
`statements`.`ip_address`,
`username`,
`comment_count`
FROM
(`statements`)
INNER JOIN `comments`
ON `comments`.`statement_id` = `statements`.`id`
LEFT JOIN `users`
ON `users`.`id` = `statements`.`author_id`
WHERE `statements`.`published` > 0
GROUP BY `statements`.`id`
ORDER BY MAX(comments.id)
尝试使用LEFT JOIN
获取comments
表:
SELECT `statements`.`id`, `statement`, `statements`.`timestamp`, `statements`.`published`, `image`, `statements`.`author_id`, `statements`.`ip_address`, `username`, `comment_count`
FROM (`statements`)
LEFT JOIN `comments` ON `comments`.`statement_id` = `statements`.`id`
LEFT JOIN `users` ON `users`.`id` = `statements`.`author_id`
WHERE `statements`.`published` > 0
GROUP BY `statements`.`id`
ORDER BY MAX(comments.id) DESC
依最大评论ID降序排列,会将带有最新评论的语句放在顶部。
关于MySQL文档使用NULL值
在执行ORDER BY时,如果执行ORDER BY ... ASC,则将首先显示NULL值;如果执行ORDER BY ... DESC,则将显示NULL值。
没有注释的语句( MAX(comments.id) IS NULL
)必须放在结果的底部。
我会做的完全不同:
SELECT
statements.*,
cm.id
FROM
statements LEFT JOIN
(SELECT statement_id, MAX(id) id FROM comments GROUP BY statement_id) cm
ON cm.statement_id = statements.id
LEFT JOIN users
ON users.id = statements.author_id
WHERE statements.published > 0
ORDER BY cm.id;
这样,您就不必依赖MySQL分组了,该查询应该可以在任何其他数据库中使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.