-1

我正在使用 MySQL Server 5.x,并且我有一个存储站点帖子数据的帖子表。有时帖子可以是父帖子的子帖子,在这种情况下,表格记录了帖子父的 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 FROM myTable ORDER BY COALESCE(post_parent, ID), ID

但是,我需要在这里添加另一个转折。假设表中有 16000 条记录以某种随机顺序排列,这意味着后 100 条记录(例如记录 101 - 200 )可能都是后孩子,但我总是想返回孩子的父母总是返回的结果这些孩子。因此,对于上述查询,如果我使用“limit 100, 25”,我最终会得到只有没有父母的孩子的结果。我怎样才能避免这种情况,并让相关的父母总是带着孩子正确地返回?

4

2 回答 2

2
SELECT ID, post_parent, title, content
FROM myTable
ORDER BY COALESCE(post_parent, ID), ID

SQL 小提琴示例

于 2013-02-21T16:11:33.177 回答
1

像这样的东西应该使用CASE

SELECT *
FROM YourTable
ORDER BY 
  CASE WHEN post_parent IS NOT NULL THEN post_parent ELSE Id END

样品小提琴

于 2013-02-21T16:11:32.740 回答