在单个查询中按顺序获取有序的父子列表(MySQL)

时间:2017-08-25 06:32:28

标签: mysql sql parent-child

我有一张名为comments的表格。这里有三列相关:

id, parent_id, create_date

默认情况下,父评论的parent_id为0。每个孩子都有parent_id父母的id。 (到目前为止显而易见的事情)

我正在寻找一个单独的SQL查询,它将按如下顺序排序:

  • 首先,由父母create_date DESC
  • 其次,父母下面的每个孩子(如果孩子存在),create_date DESC

一个例子:

  1. 家长评论,1天前
    1. 最新儿童评论1小时前
    2. 第二个最新儿童评论3小时前
  2. 家长评论,3天前
    1. First Child Comment,1小时前
  3. 这可以在单个查询中执行吗?目前我正在使用php嵌套循环,效率非常低。

1 个答案:

答案 0 :(得分:1)

最直接的解决方案是使用两个日期(记录日期和记录的父日期)进行排序

SELECT *
  FROM (   SELECT c1.id,
                  c1.parent_id,
                  c1.create_date ac,
                  c1.create_date ap
             FROM comments c1
            WHERE parent_id = 0
           UNION
           SELECT c2.id,
                  c2.parent_id,
                  c2.create_date ac,
                  p.create_date ap
             FROM comments c2
             JOIN comments p
               ON c2.parent_id = p.id) c
 ORDER BY c.ap, c.ac;

sqlfiddle demo