2017-10-25 4 views
1

質問があります。MySQL - 1つに結合して2列並べ替え

私は1つのテーブルの2つのカラムを1つのカラムに結合するSQLクエリを作成していますが、結果はそのカラムで昇順にソートされます。

だから、私たちは自動インセプションのIDがのテーブルを持っているとしましょう。同じテーブルに列parentIDがあります(0でも既存のIDでもかまいません)。

ID | parentID | column1 | column2 | number 
------------------------------------------- 
1 | 0  | data | data | 1 
2 | 0  | data | data | 1 
3 | 1  | data | data | 1 
4 | 2  | data | data | 1 
5 | 0  | data | data | 1 
6 | 4  | data | data | 1 
7 | 1  | data | data | 1 

そして、私はIDPARENTIDが参加し、一緒にソートされる場所結果を取得したいと思います。だからテーブルは見えるでしょう。 (PARENTIDはそれがIDによってソート、0になる場合)

ID | parentID | JOINEDCOLUMN | column1 | column2 | number 
------------------------------------------- 
1 | 0  | 1    | data | data | 1 
3 | 1  | 1    | data | data | 1 
7 | 1  | 1    | data | data | 1 
2 | 0  | 2    | data | data | 1 
4 | 2  | 2    | data | data | 1 
6 | 4  | 4    | data | data | 1 
5 | 0  | 5    | data | data | 1 

(私は、結果として結合列が、ソートされたテーブルからデータを望んでいない - > PHP ...)

SELECT 
    id as JOINEDCOLUMN, parentID, column1, column2, column3 
FROM table 
WHERE number = 1 
UNION 
SELECT 
    parentID, parentID, column1, column2, column3 
FROM table 
WHERE number = 1 AND parentID <> 0 
ORDER BY `JOINEDCOLUMN` ASC 
+0

あなたはより多くのそれを説明することができますか? –

答えて

1

使用CASEあなたORDER BY

にはそうでない場合は二回PARENTID行を返す> - 期待通りに動作しない - 私は、クエリを持っています
SELECT 
    * 
FROM 
    demo /* add your filter WHERE number = 1 */ 
ORDER BY 
    CASE 
    WHEN parentID = 0 
    THEN ID 
    ELSE parentID 
    END 

Demo、あなたがJOINEDCOLUMNによって何を意味するかSelect

+0

ありがとうございます。あなたは私の命を救いました。 :)デモもありがとう。 :)私は 'CASE'を一度も使用していないので、それが存在することはわかりませんでした。 –

関連する問題