2017-10-21 7 views
1

私はアイテムを含むテーブルを持っています。いくつかのものは他のものの子です(私はいくつかのフォーラムの会話のようなものもあれば、前のものの子どもも、 、いくつかは、多くの子供を持っていますが、深い一つだけのレベルがあり、子どもたちの子)が存在しない、例えば私はいくつかの基準を照会した後、次のリストを取得し、idをソート順:mysql(階層情報付きデータ)のグループ化とソート

| id | title | date  | childof | 
| 002 | tit2 | 2017-02-23 | 000  | if 000, not a child 
| 003 | tit3 | 2017-05-12 | 000  | not a child 
| 004 | tit4 | 2017-03-25 | 002  | child of 002 
| 005 | tit5 | 2017-03-26 | 002  | other child of 002 
| 006 | tit6 | 2017-06-13 | 000  | not a child 
| 007 | tit7 | 2017-07-06 | 003  | only child of 003 

私の質問がについてソートされます/結果をグループ化する:結果は次のように表示されます:

| id | title | date  | childof | 
| 006 | tit6 | 2017-06-13 | 000  | no child most recent at first level 
| 003 | tit3 | 2017-05-12 | 000  | one child 
| 007 | tit7 | 2017-07-06 | 003  | only child of previous 
| 002 | tit2 | 2017-02-23 | 000  | two children 
| 004 | tit4 | 2017-03-25 | 002  | child #1 of 002 oldest 
| 005 | tit5 | 2017-03-26 | 002  | child #2 of 002 most recent 
最初のレベル(子ではない項目)
  • 子どもたちが最初に親
  • 私の出発の下に親何その日以降に再編成が、最も古いと一緒に注文されているため、日付によって

    • (最新の最初)次のようなものでした。

      SELECT * FROM mytable WHERE somecriteriaok ORDER BY日付GROUP BY childof。

      もちろん、私ははるかに複雑な解決策を試しましたが、上記の結果を達成できないようですので、この質問を簡単かつ明確にしようとしました...うまくいけば、私は成功し、 go(私の英語を許す...)。

      ピエール。

    答えて

    0

    これはややこしいことですが、階層の深さが1階層であるため、これを行うことができます。ここでjoinを使用しての一つの方法は、次のとおりです。

    SELECT t.* 
    FROM mytable t LEFT JOIN 
        mytable tp -- parent 
        ON tp.id = t.childof 
    WHERE somecriteriaok 
    ORDER BY COALESCE(tp.date, t.date) DESC, -- newest parents first 
         COALESCE(tp.id, t.id),   -- keep records together 
         (tp.id IS NULL) DESC,   -- put the parent first 
         t.date;       -- children in date order 
    
    +0

    Waou。適切に打ち付けられた!! COALESCEを知らなかったのですが、GROUP BYを使用することは解決策ではありませんでした。クイックアンサーのおかげで、私はすでにそれを私の複雑なリクエストに入れていました。 – pierr0t

    0

    複数の注文を試しましたか?

    ORDER BY date DESC, childof DESC 
    

    とそれ以降のGROUP BYを追加できますか?

    +0

    はい、私はchildofでソートすることは関係がないということで、私は同じchildofを持つアイテムの日付でソートする必要がある、と彼らは彼らの親の後にリストされる必要があり、PBMを試してみました次の親よりも日付が古い可能性があります。 – pierr0t

    関連する問題