Auswählen von Datensätzen in der Reihenfolge der übergeordneten ID

8

Einfache Frage .. kann einfach nicht das Ergebnis in der Reihenfolge, die ich brauche, bekommen: p

Ich habe eine Tabelle "Kategorien"

%Vor%

Ich versuche, die folgende Ergebnismenge auszuwählen:

%Vor%

Mit anderen Worten, ich möchte alle Spalten aller Zeilen, wobei Zeilen mit Eltern unmittelbar hinter der Elternzeile stehen und alle alphabetisch sortiert sind.

%Vor%

Die Abfrage, die ich jetzt verwende, ordnet die Zeilen nicht korrekt nach ihren Eltern an

%Vor%     
Fo. 23.11.2010, 18:01
quelle

4 Antworten

5

Für eine einfache, möglicherweise suboptimal skalierbare Lösung empfehle ich, dies mit der maximalen Anzahl an Ebenen zu programmieren, die Sie haben werden:

Nur für 2 Ebenen:

%Vor%

Sie fragen wirklich nach dem Sortieren, also würde ich empfehlen, einen "Pfad" -ähnlichen String zu erzeugen: (siehe unten für Beispielausgabe dieser Abfrage)

%Vor%

Für 3 Ebenen, obwohl Ihre Daten dies noch nicht haben - Pfad weggelassen, weil es hässlich wird:)

%Vor%

Eine umfassendere Lösung für die schnelle Auswahl aller Elemente in einer bestimmten Kategorie auf jeder Ebene, die einige Arbeiten an allen Schreibvorgängen erfordert, implementiert ein 'rechts' und 'links' Nummerierungskonzept . Aber weitere Diskussionen darüber gehen mit Sicherheit über den Rahmen dessen hinaus, was Sie fragen. Dies ist jedoch der einzige gute Weg nach meiner Erfahrung, diese Art von selbstreferenzierender Tabelle sehr nützlich zu machen, wenn sie groß wird (vielleicht nach 1000+ Zeilen mit 3 bis 10 Ebenen).

Nachtrag: Beispielausgabe von der zweiten Abfrage:

%Vor%     
zanlok 23.11.2010, 18:37
quelle
13

Wenn diejenigen ohne Eltern null in ihrer Spalte parent hatten, wäre Ihre Aussage sehr einfach:

%Vor%

Wenn Sie darauf bestehen, dass 0 kein Elternteil darstellt, können Sie ausführlichere CASE WHEN ... THEN ... -Anweisung verwenden.

Bearbeiten:

%Vor%     
cababunga 23.11.2010 18:55
quelle
2

Dies würde funktionieren, aber nicht rekursiv.

%Vor%     
Tomalak 23.11.2010 18:57
quelle
0

Sehen Sie, ob das funktioniert:

%Vor%

Ich habe das mit Micorsoft Access erstellt und es sah so aus, als ob Sie es wollten. Ich denke, dass Sie einen Bericht benötigen, um zu gruppieren, um Ihnen visuell zu geben, was Sie einem Verbraucher geben möchten, aber um den Punkt richtig beizutreten, funktioniert das.

    
johnny 23.11.2010 18:32
quelle

Tags und Links