我正在使用MySQL Server 5.x,我有一个post表来存储站点的帖子数据。有时,帖子可以是父帖子的子帖子,在这种情况下,表格会记录帖子父母的ID号。
该表具有ID字段(bigint),post_parent字段(也是bigint),标题和内容。
示例数据可能如下所示
ID post_parent title content
----------------------------------------------
1 test testing post content
2 test2 more test content
3 1 test3 post 1 is my parent
4 2 test4 post 2 is my parent
5 tes5 test content post 5
6 2 test6 post 2 is my parent
所以我想查询表中的X个记录,并按照帖子ID对结果进行排序,并将该帖子的子项与父组分组,其结果如下所示:
ID post_parent title content
----------------------------------------------
1 test testing post content
3 1 test3 page 1 is my parent
2 test2 more test content
4 2 test4 page 2 is my parent
6 2 test6 post 2 is my parent
5 test5 test content post 5
所以基于答案显然我可以使用这样的东西:
SELECT ID,post_parent,title,content 来自myTable ORDER BY COALESCE(post_parent,ID),ID
但是,我需要在这里添加另一个转折点。让我们说表中有16000条记录以某种随机顺序排列,这意味着第二百条记录(例如记录101 - 200)可能都是后期记录,但我总是希望将结果返回给孩子的父母总是带回来的这些孩子。因此,如果我使用“限制100,25”进行上述查询,我最终得到的结果只是没有父母的孩子。我怎样才能避免这种情况,并让相关的父母一直回来,让孩子们适当地合作?
答案 0 :(得分:2)
SELECT ID, post_parent, title, content
FROM myTable
ORDER BY COALESCE(post_parent, ID), ID
答案 1 :(得分:1)
这样的事情应该可以使用CASE
:
SELECT *
FROM YourTable
ORDER BY
CASE WHEN post_parent IS NOT NULL THEN post_parent ELSE Id END