Maison > Article > base de données > Comment implémenter des niveaux illimités de requêtes de relation parent-enfant en une seule phrase dans MySQL
Dans SQL Server, il est facile d'utiliser des expressions CTE pour interroger des niveaux infinis de relations parent-enfant ; dans les versions qui ne prennent pas en charge les expressions CTE, cela peut également être facilement réalisé à l'aide de la fonction. récursivité.
Dans MySQL, l'exemple de cette exigence est légèrement compliqué. Il n'y a pas de requête qui prend en charge la récursion dans MySQL, il n'y a pas de fonction table et la fonction ne prend pas en charge la récursion, elle est donc généralement implémentée avec une boucle, ce qui semble gênant. Aujourd'hui, j'ai vu une requête récursive implémentée avec une seule instruction. J'ai une idée unique et j'aimerais la partager.
Tutoriels vidéo MySQL associés recommandés : "Tutoriel MySQL"
Structure et données de la table
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);
Requête sur tout l'id = 5 Parent
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;
Selon cette méthode de requête parent, il est facile d'écrire une requête pour tous les enfants La requête suivante id=2 pour tous les enfants
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
Cet article explique Apprendre. comment implémenter des niveaux illimités de requêtes de relation parent-enfant en une seule phrase dans MySQL Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois.
Recommandations associées :
Comment accéder à SQL Server FileStream avec progression
Que faire lorsque vous oubliez votre SQL Server mot de passe administrateur Comment gérer
Une brève analyse de l'utilisation de concat et group_concat dans MySQL
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!