SQL geschachtelte Reihenfolge durch?
Ich bin mir sicher, dass dies wurde gebeten vor, aber ich weiß nicht, wie es genau um die Antwort zu finden.
Ich habe eine Tabelle mit Kategorien und sub-Kategorien. Sie haben jeweils eine id und eine parent-id. Wenn es eine Kategorie der obersten Ebene, die parent-id 0 ist. Sub-Kategorien, die parent-id auf die
Kategorie-id der Eltern.
category_id # The ID for this record
category_name # The name of the category
parent_id # The parent ID for this category
display_order # Order of categories within their grouping
1 A 0 0 # First primary category
2 a1 1 0 # Subcategory, parent is A, display_order is 0
3 a2 1 1
4 a3 1 2
5 B 0 1 # Second primary category
6 b1 5 0 # Subcategory, parent is B, display_order is 0
7 b2 5 1
8 b3 5 2
Bin ich zu schreiben versucht, eine SQL-Abfrage, die mir alle Kategorien in dieser Reihenfolge:
A, a1, a2, a3, B, b1, b2, b3
SELECT * FROM categories ORDER BY display_order
Ist dies möglich, in SQL, oder muss ich mehrere Abfragen
Dank,
Brad
- können Sie uns ein Beispiel geben von input-Daten? nicht nur für die Ausgabe...
- können die sub-Kategorien haben Unterkategorien, die wiederum?
- Zugegeben ein Beispiel, wie die Daten der Tabelle aussieht
- ist es wichtig, stets die display_order der wichtigsten Kategorien?
Du musst angemeldet sein, um einen Kommentar abzugeben.
So etwas vielleicht funktionieren:
aber da es kann nicht mit einem index, es wird langsam. (Nicht testen, aber könnte falsch sein)
Den ersten
ORDER BY
Zustand sortiert Eltern und Kinder zusammen, dann die zweite sorgt für die Eltern vor Ihren Kindern; die Dritte Art, die Kinder unter sich.Es ist auch offensichtlich, dass Sie nur in dem Fall, dass Sie direkt beschrieben, wo Sie eine zwei-Ebenen-Hierarchie.
A
,B
undC
in dieser Reihenfolge. ich fügteA
letzten. also mein Ergebnis aus dieser Abfrage ist B, b1, b2, b3, C, c1, c2, c3, A, a1, a2, a3. aber wenn das nie passieren kann, oder wenn die Reihenfolge der Hauptkategorien uninteressant ist, dann natürlich Arbeit. aber, da es ein display_order Spalte für die wichtigsten Kategorien als gut, ich interpretierte die Frage so, die Bestellung ist ebenso wichtig.display_order
auf die wichtigsten Kategorien. Wenn, dass muss respektiert werden, auch, Sie brauchen eine Verknüpfung, wie Sie in einer der anderen Antworten.Antwort wurde bereits angenommen, aber ich dachte, ich würde teilen meine Gedanken dazu sowieso. ich habe versucht zu Sortieren, die wichtigsten Kategorien nach Ihren display_order Spalte als gut. hier ist meine Tabelle
wie Sie sehen, habe ich großen Wert auf die Beurteilung der Kategorien in keiner linearen Ordnung 🙂
meiner Abfrage:
Klingt fast identisch zu einem anderen, die ich beantwortet habe mit ähnlichen parent/child-Hierarchie Beibehaltung der Kind-Elemente auf gleicher Ebene gruppiert die dazugehörigen Eltern...Überprüfen Sie diesen thread
Ich-wenn möglich-erstellen von SQL-inkrementell, nicht zuletzt, weil es gibt mir die Möglichkeit zu testen, wie ich gehe.
Die erste Sache, die wir tun können, ist identifizieren Sie die top-level-Kategorien:
Nun müssen wir beitreten, die mit den Kategorien und Unterkategorien, um das Ergebnis zu erhalten:
In der join-Bedingung ist ungewöhnlich, sollte aber funktionieren; es sammelt Zeilen, in denen die parent ID ist die gleiche wie die aktuelle Kategorie-ID, oder Reihen, in denen die parent-ID 0, aber die Kategorie-ID ist die gleiche. Die Bestellung ist dann fast schon trivial - außer, dass, wenn man es mit der sub-Kategorie bestellen, Sie möchten den übergeordneten Element an der Vorderseite der Liste. Der CASE-Ausdruck behandelt, die Zuordnung.