繁体   English   中英

如何按其他表中的最新记录对记录进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM