代码之家  ›  专栏  ›  技术社区  ›  TheLettuceMaster

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

  •  2
  • TheLettuceMaster  · 技术社区  · 8 年前

    comments . 此处有三列相关内容:

    id, parent_id, create_date .

    家长评论有一个 parent_id 默认情况下为0。每个孩子都有一个 父项id 父母的 id

    我正在寻找一个SQL查询,它的顺序如下:

    • 首先,由家长 create_date DESC
    • 其次,父母下面的每个孩子(如果有孩子的话),通过 创建日期描述

    例如:

    1. 家长评论,1天前
      1. 3小时前第二条最新儿童评论
    2. 家长评论,3天前

    这可以在单个查询中实现吗?目前,我正在使用php嵌套循环,这是非常低效的。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Radim Bača    8 年前

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

    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