2016-06-17 17 views
0

Ich möchte Datenbankergebnisse spucken, die nach einer übergeordneten ID gruppiert sind.Abfrage gruppiert nach einzelnen Spalte

Ich habe die folgende Tabelle:

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

Einige der pages haben eine parent_id von 0, was bedeutet, dass sie nicht ein Elternteil haben.

Lets sagen, dass ich die folgenden Zeilen in der pages Tabelle haben:

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 

diese Zeilen gegeben, möchte ich folgendes auf meiner PHP-Seite zur Ausgabe:

Colors 
    Red 
    Green 
    Blue 

Devices 
    Mobile 
    Desktop 
    Tablet 

Ich weiß, dass ich kann, Verwenden Sie eine Abfrage, um die Zeilen mit einer parent_id 0 zu erhalten, und dann eine andere Abfrage, um die Zeilen mit einer parent_id dieser id zu erhalten.

Ist es möglich, dies als eine einzige Abfrage zu schreiben?

+0

Können Sie auch diese beiden Abfrage teilen? Es wird leicht zu verstehen, was Sie wollen? – C2486

Antwort

1

Ja, aber es ist nicht schön: Sie haben eine hierarchische Datenstruktur (parent/child), und um Dinge auf diese Weise in einer einzigen Abfrage anzuordnen, sind rekursive Abfragen erforderlich, die mysql nicht unterstützt.

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

Für jede Ebene Ihres Baum, müssen Sie eine andere beitreten/alias wie oben: Sie haben

Sie benötigen eine Selbstverknüpfung für jede Ebene der Hierarchie zu tun.

0

Ich glaube, Sie suchen die folgende Lösung:

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 

Sie das Ergebnis als wie erhalten:

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

Jetzt haben Sie es in PHP Seite zu anordnen. Hier

ist die sqlfiddle Link: http://sqlfiddle.com/#!9/11fa6/3

Verwandte Themen