MySQL查询 - 如何在一个表中按2行排序

时间:2013-02-21 16:04:39

标签: mysql wordpress

我正在使用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”进行上述查询,我​​最终得到的结果只是没有父母的孩子。我怎样才能避免这种情况,并让相关的父母一直回来,让孩子们适当地合作?

2 个答案:

答案 0 :(得分:2)

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

SQL Fiddle example

答案 1 :(得分:1)

这样的事情应该可以使用CASE

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

Sample Fiddle