3つの列に従ってデータをフィルタリングしたいと思います。sqlフィルタの問題parent_id、id、sort
- PARENT_ID
- ID
- ソート
例ベースBDD:
id | parent_id | sort | text
-----------------------------
1 | NULL | 3 | D
2 | 10 | 0 | AA
3 | NULL | 1 | B
4 | 10 | 2 | AB
5 | 3 | 0 | BA
6 | 8 | 0 | CA
7 | 3 | 2 | BC
8 | NULL | 2 | C
9 | 3 | 1 | BB
10 | NULL | 0 | A
11 | 1 | 0 | DA
私はこの結果を取得したい:
id | parent_id | sort | text
-----------------------------
10 | NULL | 0 | A
2 | 10 | 0 | AA
4 | 10 | 2 | AB
3 | NULL | 1 | B
5 | 3 | 0 | BA
9 | 3 | 1 | BB
7 | 3 | 2 | BC
8 | NULL | 2 | C
6 | 8 | 0 | CA
1 | NULL | 3 | D
11 | 1 | 0 | DA
私はCOALESCE
関数を成功させずに試してみます:SELECT * FROM menu ORDER BY COALESCE(parent_id, id) ASC, parent_id ASC, sort ASC
。 PARENT_IDのASCでソート
私は
- ステップ1 ... ...私はよく分からない
COALESCE
機能と優先順位が設定するためのロジックがあると思いステップ2:ライブテストのためのPARENT_ID ASCでソートNULLされていない場合
データ:http://sqlfiddle.com/#!9/ed850/1
SOLUTION(教義とsymfonyのために働く)
SELECT test.*,
(CASE
WHEN test.parent_id IS NULL THEN test.sort
ELSE test_1.sort
END) AS test1,
(CASE
WHEN test.parent_id IS NULL THEN 1
ELSE 0
END) AS test2
FROM test AS test
LEFT JOIN test AS test_1
ON (test_1.id = test.parent_id)
ORDER BY test1 ASC,
test2 DESC,
test.sort ASC
あなたの答えのためのライブ結果@quadzzと他人に感謝:私は、これは動作するはずだと思うhttp://sqlfiddle.com/#!9/ed850/4
あなたが唯一のこれまでの階層の1つのレベルがありますか? (いずれの行も*親か子かどちらかであり、決して祖父母関係や深い関係を結ぶことはありません) –