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

Php 如何按其他表中最近的记录对记录进行排序,php,mysql,sql,comments,sql-order-by,Php,Mysql,Sql,Comments,Sql Order By,我试图按最近的活动(评论)排序语句。但是,如果语句没有注释,下面的查询将不会在末尾显示该语句。如何更改查询,以便最后显示没有注释的语句 SELECT `statements`.`id`, `statement`, `statements`.`timestamp`, `statements`.`published`, `image`, `statements`.`author_id`, `statements`.`ip_address`, `username`,

我试图按最近的活动(评论)排序语句。但是,如果语句没有注释,下面的查询将不会在末尾显示该语句。如何更改查询,以便最后显示没有注释的语句

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) 

尝试
左连接
以查看
注释
表:

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文档

在执行ORDER BY时,如果执行,则首先显示空值 订购人。。。ASC和最后一个,如果您按。。。描述


没有注释的语句(
MAX(comments.id)为NULL
)必须放在结果的底部。

请尝试
左连接
以查看
注释
表:

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文档

在执行ORDER BY时,如果执行,则首先显示空值 订购人。。。ASC和最后一个,如果您按。。。描述


没有注释的语句(
MAX(comments.id)为NULL
)必须放在结果的底部。

请尝试
左连接
以查看
注释
表:

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文档

在执行ORDER BY时,如果执行,则首先显示空值 订购人。。。ASC和最后一个,如果您按。。。描述


没有注释的语句(
MAX(comments.id)为NULL
)必须放在结果的底部。

请尝试
左连接
以查看
注释
表:

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文档

在执行ORDER BY时,如果执行,则首先显示空值 订购人。。。ASC和最后一个,如果您按。。。描述


没有注释的语句(
MAX(comments.id)为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 group by hack,并且此查询应该可以在任何其他数据库中工作。

我会做一些完全不同的事情:

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 group by hack,并且此查询应该可以在任何其他数据库中工作。

我会做一些完全不同的事情:

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 group by hack,并且此查询应该可以在任何其他数据库中工作。

我会做一些完全不同的事情:

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 group by hack,并且此查询应该可以在任何其他数据库中运行。

@user3835276,请尽量不要使用“不工作”这一短语。我们通常认为它是最没有帮助的故障报告。
:-)
。考虑这个答案让你走吗?我希望一个<代码>语句总是有一个<代码>用户< /代码>,所以期望它可以是一个<代码>内部连接< /代码>?@ HalFER通过最近的评论活动来查询命令主题/语句/线程。但是,查询无法显示没有注释的项目。例如。(声明1:今天发表评论;声明2:昨天发表评论;声明3:无评论)。除了语句3没有show@halfer,在这种情况下,您需要
内部连接
用户
,但不需要
注释
,请尝试取消
订购人
以查看其影响。@user3835276,请尝试不要使用短语“不起作用”。我们通常认为它是最没有帮助的故障报告。
:-)
。考虑这个答案让你走吗?我希望一个<代码>语句总是有一个<代码>用户< /代码>,所以期望它可以是一个<代码>内部连接< /代码>?@ HalFER通过最近的评论活动来查询命令主题/语句/线程。但是,查询无法显示没有注释的项目。例如。(声明1:今天发表评论;声明2:昨天发表评论;声明3:无评论)。除了语句3没有show@halfer,在这种情况下,您需要
内部连接
用户
,但不需要
注释
,请尝试取消
订购人
以查看其影响。@user3835276,请尝试不要使用短语“不起作用”。我们通常认为它是最没有帮助的故障报告。
:-)
。考虑这个答案让你走吗?我希望一个<代码>语句总是有一个<代码>用户< /代码>,所以期望它可以是一个<代码>内部连接< /代码>?@ HalFER通过最近的评论活动来查询命令主题/语句/线程。但是,查询无法显示没有注释的项目。例如。(声明1:今天发表评论;声明2:昨天发表评论;声明3:无评论)。除了语句3没有show@halfer,在这种情况下,您需要
内部连接
用户
,但不需要
注释
,请尝试取消
订购人
以查看其影响。@user3835276,请尝试不要使用短语“不起作用”。我们通常认为它是最没有帮助的故障报告。
:-)
。考虑这个答案让你走吗?我希望一个<代码>语句总是有一个<代码>用户< /代码>,所以期望它可以是一个<代码>内部连接< /代码>?@ HalFER通过最近的评论活动来查询命令主题/语句/线程。但是,查询无法显示没有注释的项目。例如。(声明1:今天发表评论;声明2:昨天发表评论;声明3:无评论)。除了语句3没有show@halfer,在这种情况下,您需要
内部连接
用户
,但不需要
注释
尝试取消
订单
以查看其影响。此查询的可能重复的可能重复的可能重复不需要MySQL hack。这足够放MAX(comments.id