Immer alle übergeordneten Zeilen in einer SQL-Abfrage
Ich habe eine einfache MySQL Tabelle thats enthält eine Liste der Kategorien-Ebene ist bestimmt durch parent_id:
id name parent_id
---------------------------
1 Home 0
2 About 1
3 Contact 1
4 Legal 2
5 Privacy 4
6 Products 1
7 Support 1
Versuche ich zu machen, eine breadcrumb-trail. Also ich habe die 'id' des Kindes, möchte ich, um alle verfügbaren Eltern (Durchlaufen bis die Kette bis wir den Wert 0 erreichen "nach Hause"). Es könnte eine beliebige Anzahl oder untergeordneten Zeilen, die gehen, um eine unbegrenzte Tiefe.
Derzeit bin ich mit einer SQL-Aufruf für jedes Elternteil, das ist chaotisch. Gibt es eine Möglichkeit im SQL zu tun, das auf einer Abfrage?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angepasst hier:
Die Linie
@r := 5
ist die Seitennummer der aktuellen Seite. Das Ergebnis ist wie folgt:+1
@Mark, du Wunder tun mit variable Abfragen 😀Ehrfürchtige Antwort von Mark Byers!
Vielleicht ein bisschen spät, um der Partei, aber wenn Sie wollen auch verhindern, dass eine Endlosschleife, wenn id = parent_id (d.h., wenn Daten irgendwie beschädigt wurde), können Sie die Antwort, wie diese:
Zusätzlich zu den oben genannten Lösungen:
Autor auch die Eltern können einen Zugang zur post.
Möchte ich prüfen, ob Autor hat Zugriff auf die post.
Lösung:
geben, die post-Autor-id und kehren alle Ihre Autoren und Autorin Eltern
@r := 2 => zuweisen von Wert @r-variable.
Ich denke, es gibt keinen einfachen Weg, dies zu tun, verwenden Sie eine Abfrage.
Ich würde empfehlen, einen Blick auf Nested Sets, das scheint zu passen Ihre Bedürfnissen.
Wenn Sie slug statt der id dann einfach ausführen auf sub-query zu finden-id der untergeordneten Kategorie.
Tisch - Kategorien
| id | parentId | slug |
|-------------------------|
| 1 | 0 | u1 |
| 2 | 1 | u2 |
| 3 | 2 | u3 |
| 4 | 0 | u4 |
Benutzte ich die bisherigen Antworten als Beispiele, um etwas besser lesbar.
Das Ergebnis der Ausführung sieht so aus:
(nur für schnelle)
überprüfen Sie es selbst, die Sie benötigen, um Werte aus der Frage in die Datenbank
test
Tabelleorganizations
AFAIK keine.
Diese Sitepoint-Artikel kann Ihnen dabei helfen.
Konnte Sie abrufen alle Elemente mit einer Abfrage, speichern Sie es in ein array und iteriere,
wie erklärt hier und hier