Heim  >  Artikel  >  Datenbank  >  So implementieren Sie unbegrenzte Ebenen der Eltern-Kind-Beziehungsabfrage in einem einzigen Satz in MySQL

So implementieren Sie unbegrenzte Ebenen der Eltern-Kind-Beziehungsabfrage in einem einzigen Satz in MySQL

jacklove
jackloveOriginal
2018-06-15 09:24:184754Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn