从 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
我有一个 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