从 MYSQL 数据库中获取 select 子记录的有效方法

Efficient way to select child records from a MYSQL Database

我有一个 mysql 数据库。 我在这个数据库中创建了一个 table,其中包含 posts.

table有以下列:

p_id (primary key), post_header, creation_date, post_body, r_id, u_id

所以每条记录代表一条post.

r_id 引用一个 p_id,当它不为 null 时,表示它是对 p_id(或 post id)的回复。

我的问题是我想要一个查询来获取所有 post 并将对每个 post 的所有回复都分组在下面。

示例结果集:

所以基本上我正在寻找一个查询,它可以按创建日期 desc 对我的全局 post 进行排序,并且还可以按创建日期 desc 的顺序将回复嵌套在下面。

我试过像这样使用分组功能:

SELECT * FROM global_post group by r_id order by creation_date desc;

但它不起作用。有没有一种机制可以像这样将记录分组在一起?

我不想为每个子查询 post

你可以试一试分段排序

order by Case when r_id is null then p_id else r_id end 

GROUP BY用于聚合数据,这不是你想要的。

尝试按 coalesce(r_id, p_id) 排序,这将使全局帖子的顺序与其子项相同。然后添加第二个排序,将 global_post 放在带有 case 语句的顶部。

select * from global_post 
order by coalesce(r_id, p_id) desc, 
case when r_id is null then 0 else 1 end, creation_date desc