首页 > 解决方案 > MySQL - 按不同标准对帖子/评论进行排序和分组

问题描述

我有一个 SQL 语句,它按发布时间的顺序对评论进行排序,并将子回复分组到父评论。

 |- Comment 1      (Oldest)
  |- Sub Comment   (Sub Oldest)
  |- Sub Comment   
  |- Sub Comment   (Sub Newest)
 |- Comment 2      (Newest)

查询如下

SELECT 
  *
FROM feed_comments c
WHERE c.feed = 50
GROUP BY c.id
ORDER BY 
       IF(c.parent_id IS NULL, c.id, parent_id), 
       c.time ASC

我想修改查询以仍然以相同的方式对评论进行分组但是我希望主要评论是 NEWEST 到 OLDEST 并保持子回复 OLDEST 到 NEWEST

 |- Comment 1      (Newest)
  |- Sub Comment   (Sub Oldest)
  |- Sub Comment   
  |- Sub Comment   (Sub Newest)
 |- Comment 2      (Oldest)

我一直在玩 IF 和 CASE 语句的许多不同组合,但似乎找不到正确的解决方案!

标签: phpmysqlsql

解决方案


您的查询未引用日期/时间列,因此我必须猜测您如何表示“最新”。让我猜猜这指的是更大的ID。

您还可以使用 简化表达式coalesce()

SELECT c.*
FROM feed_comments c
WHERE c.feed = 50
GROUP BY c.id
ORDER BY coalesce(c.parent_id, c.id) desc, 
         c.time ASC

推荐阅读