2017-08-25 49 views
2

我有一個名爲comments的表。這裏有三欄是相關的:在單個查詢(MySQL)中獲取父 - 子的有序列表

id, parent_id, create_date

默認情況下,父級註釋的parent_id爲0。每個孩子都有父母的idparent_id。 (顯而易見的東西迄今)

我找了一個SQL查詢,將責令其是這樣的:

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

一個例子:

  1. 家長通訊耳鼻喉科,1天前
    1. 最新兒童評論1小時前
    2. 二最新兒童評論4小時前
  2. 父評論,3天前
    1. 第一個孩子評論,1小時前

這是可能的在一個單一查詢?目前我是我使用PHP嵌套循環,這是非常低效的。

回答

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