Créez une requête récursive en couches dans mysql
id | 名称 | 父ID |
---|---|---|
19 | 类别1 | 0 |
20 | 类别2 | 19 |
21 | 类别3 | 20 |
22 | 类别4 | 21 |
représentent l'ID de la classe parent dans la catégorie donnée. Par exemple, le 19 de la catégorie 2 est 19, indiquant qu'il s'agit d'une sous-catégorie de la catégorie 1. parent_id
parent_id
Solution mysql 8: récursivement avec
Cette requête récupérera toutes les catégories de sous-caca de l'ID père donné (19 dans cet exemple). La sortie inclura toutes les catégories d'appartenance directe ou indirecte à la catégorie 1 (id = 19).
<code class="language-sql">WITH RECURSIVE cte (id, name, parent_id) AS ( SELECT id, name, parent_id FROM products WHERE parent_id = 19 UNION ALL SELECT p.id, p.name, p.parent_id FROM products p INNER JOIN cte ON p.parent_id = cte.id ) SELECT * FROM cte;</code>
MySQL 5.x Solution: variable d'union interne ou auto-connexion
Variables néiliennes:
Cette requête utilise la fonction spécifique de MySQL pour allouer et modifier les variables pendant son exécution. Par initialisation des variables
avec ID parent (19), et en utilisant la fonction<code class="language-sql">SELECT id, name, parent_id FROM (SELECT * FROM products ORDER BY parent_id, id) products_sorted, (SELECT @pv := '19') initialisation WHERE FIND_IN_SET(parent_id, @pv) AND LENGTH(@pv := CONCAT(@pv, ',', id));</code>
apparaît dans la liste des descendants, nous pouvons progressivement construire la liste d'ID de la progéniture. @pv
FIND_IN_SET
auto-connection: parent_id
Cette requête utilise l'ID parent auto-connecté (19) pour traverser la structure hiérarchique. En connectant le sous-arrêt avec la table parent selon la colonne , nous pouvons extraire récursivement toute la progéniture du niveau parent.
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!