Heim >Datenbank >MySQL-Tutorial >So implementieren Sie unbegrenzte Ebenen der Eltern-Kind-Beziehungsabfrage in einem einzigen Satz in MySQL
In SQL Server ist es einfach, CTE-Ausdrücke zu verwenden, um unendliche Ebenen von Eltern-Kind-Beziehungen abzufragen; in Versionen, die CTE-Ausdrücke nicht unterstützen, kann dies auch leicht mit Hilfe von Funktionen erreicht werden Rekursion.
In MySQL ist das Beispiel dieser Anforderung etwas kompliziert. Es gibt keine Abfrage, die die Rekursion unterstützt, es gibt keine Tabellenwertfunktion und die Funktion unterstützt keine Rekursion, daher wird sie normalerweise mit einer Schleife implementiert. was seltsam erscheint. Heute habe ich eine rekursive Abfrage gesehen, die mit einer einzigen Anweisung implementiert wurde. Ich habe eine einzigartige Idee und möchte sie gerne teilen.
Empfohlene verwandte MySQL-Video-Tutorials: „MySQL-Tutorial“
Tabellenstruktur und Daten
CREATE TABLE table1(id int, name varchar(10), parent_id int); INSERT table1 VALUES (1, ‘Home’, 0), (2, ‘About’, 1), (3, ‘Contact’, 1), (4, ‘Legal’, 2), (5, ‘Privacy’, 4), (6, ‘Products’, 1), (7, ‘Support’, 2);
Alle Eltern von ID = 5 abfragen
SELECT ID.level, DATA.* FROM( SELECT @id as _id, ( SELECT @id := parent_id FROM table1 WHERE id = @id ) as _pid, @l := @l+1 as level FROM table1, (SELECT @id := 5, @l := 0 ) b WHERE @id > 0 ) ID, table1 DATA WHERE ID._id = DATA.id ORDER BY level;
Gemäß dieser übergeordneten Abfragemethode ist es einfach, eine Abfrage zu schreiben, um alle untergeordneten Elemente zu überprüfen. Die folgende Abfrage-ID=2 alle untergeordneten Elemente
SELECT ID.level, DATA.* FROM( SELECT @ids as _ids, ( SELECT @ids := GROUP_CONCAT(id) FROM table1 WHERE FIND_IN_SET(parent_id, @ids) ) as cids, @l := @l+1 as level FROM table1, (SELECT @ids :=’1’, @l := 0 ) b WHERE @ids IS NOT NULL ) id, table1 DATA WHERE FIND_IN_SET(DATA.id, ID._ids) ORDER BY level, id
In diesem Artikel wird erläutert, wie ein einzelner Satz erstellt wird MySQL Realisiert unbegrenzte Ebenen der Eltern-Kind-Beziehungsabfrage. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
So greifen Sie mit Fortschritt auf SQL Server FileStream zu
Was tun, wenn Sie Ihren SQL Server vergessen Administrator-Passwort Umgang mit
Eine kurze Analyse der Verwendung von concat und group_concat in MySQL
Das obige ist der detaillierte Inhalt vonSo implementieren Sie unbegrenzte Ebenen der Eltern-Kind-Beziehungsabfrage in einem einzigen Satz in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!