2016-06-17 6 views
0

親IDでグループ化されたデータベース結果を吐き出したいと思います。クエリは単一の列でグループ化されています

私は以下の表を持っている:

`pages` 
    `id` int 
    `parent_id` int 
    `title` varchar 

pagesのいくつかは、彼らが親を持っていないという意味、0のparent_idを持っています。

私はpages表に次の行を考えてみましょう:

id | parent_id | title 
1 | 0   | Colors 
2 | 1   | Red 
3 | 1   | Green 
4 | 1   | Blue 
5 | 0   | Devices 
6 | 5   | Mobile 
7 | 5   | Desktop 
8 | 5   | Tablet 

これらの行を考えると、私は私のPHPページに次の出力にしたい:

Colors 
    Red 
    Green 
    Blue 

Devices 
    Mobile 
    Desktop 
    Tablet 

私は私ができることを知っていますクエリを使用してparent_idが0の行を取得し、次にparent_idの行を取得する別のクエリをidとします。

これを単一のクエリとして記述することはできますか?

+0

あなたはまた、これら二つのクエリを共有することができます:ここで

はsqlfiddleリンクですか?あなたが望むものを理解しやすいでしょうか? – C2486

答えて

1

階層型のデータ構造(親/子)があり、そのような方法で単一のクエリに配置するには、再帰的なクエリが必要です。これはmysqlがサポートしていません。

あなたが持っている階層のすべてのレベルのために自己の参加行う必要があります:あなたのツリーのすべてのレベルのために

SELECT parent.*, child.* 
FROM yourtable AS parent 
LEFT JOIN yourtable AS child ON parent.id = child.parent_id 

、あなたは上記のように、他の参加/別名が必要になります。

0

私はあなたが以下の解決策を探していると思う:

SELECT 
    t1.title as parent, t2.title 
FROM 
    pages AS t1 
LEFT JOIN pages AS t2 
    ON t1.id = t2.parent_id 
WHERE 
    t2.id IS NOT NULL 

を好きなように結果を取得します:

parent title 
Colors Red 
Colors Green 
Colors Blue 
Devices Mobile 
Devices Desktop 
Devices Tablet 

今、あなたは、あなたのPHP側でそれを整理する必要があります。 http://sqlfiddle.com/#!9/11fa6/3

関連する問題