2017-08-25 8 views
2

私はcommentsというテーブルを持っています。ここに関連性の高い3つの列があります。1つのクエリで順番に親子のリストを取得する(MySQL)

id, parent_id, create_date

親コメントの既定値はparent_idです。各子供は、親のidparent_idを持っています。

  • まず、親のcreate_date DESC
  • 第二に、親の下にそれぞれの子(であれば:私はこのようにそれを注文します単一のSQLクエリを探しています(明白なもの、これまで)

    1. 親通信:子供がcreate_date DESC

により、)の例が存在します1時間前3日前1時間前1日前耳鼻咽喉科、

  1. 最新子コメント
  2. 2番目に新しい子コメント3時間前
  • 親コメント、
    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

    をソートするために両方の日付(基準日とレコードの親日付)を使用することです
    関連する問題