Maison > base de données > tutoriel mysql > Comment créer des requêtes récursives hiérarchiques dans MySQL?

Comment créer des requêtes récursives hiérarchiques dans MySQL?

Linda Hamilton
Libérer: 2025-01-25 16:02:14
original
889 Les gens l'ont consulté

How to Create Hierarchical Recursive Queries in MySQL?

Créez une requête récursive en couches dans mysql

Comprendre la structure hiérarchique

Créez une requête en couches dans MySQL, et vous devez comprendre comment la structure hiérarchique est construite. Considérez l'exemple suivant Tableau:

id 名称 父ID
19 类别1 0
20 类别2 19
21 类别3 20
22 类别4 21
Dans ce tableau, les colonnes

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

Pour les versions MySQL 8 et au-dessus, vous pouvez utiliser récursif avec grammaire:

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>
Copier après la connexion

MySQL 5.x Solution: variable d'union interne ou auto-connexion

Pour l'ancienne version MySQL (5.x), il existe deux méthodes alternatives:

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>
Copier après la connexion
pour vérifier si

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal