Maison > base de données > tutoriel mysql > Comment puis-je récupérer efficacement les données hiérarchiques dans MySQL à l'aide de requêtes récursives?

Comment puis-je récupérer efficacement les données hiérarchiques dans MySQL à l'aide de requêtes récursives?

Barbara Streisand
Libérer: 2025-01-25 15:57:09
original
891 Les gens l'ont consulté

How Can I Efficiently Retrieve Hierarchical Data in MySQL Using Recursive Queries?

MySQL Recursive Enquête: Données hiérarchiques de traitement à haute efficacité

CONTATEDIE:

De nombreux niveaux de structures de données, tels que les systèmes de fichiers ou les diagrammes de structure de tissu, nécessitent des méthodes efficaces pour récupérer des données en fonction des relations parent-enfant. MySQL fournit plusieurs méthodes pour écrire des requêtes récursives qui ont effectivement traversé ces structures.

MySQL 8 Solution de grammaire récursive

MySQL 8 introduit récursif avec la grammaire, ce qui simplifie considérablement la requête récursive.

Remplacez simplement la valeur de à l'ID de nœud parent que vous souhaitez récupérer votre nœud enfant.
<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
  JOIN cte ON p.parent_id = cte.id
)
SELECT * FROM cte;</code>
Copier après la connexion

MySQL 5.x Solution d'ID de chemin parent_id = 19

Avant MySQL 8, vous devez utiliser d'autres méthodes de requête récursive. Une méthode consiste à allouer l'ID de chemin et à intégrer les informations hiérarchiques dans la colonne ID.

Par exemple, l'ID de chemin contenant du tableau peut être illustré ci-dessous:

Maintenant, les demandes suivantes récupéreront toutes les sous-nodes de catégorie 1:

ID NAME
19 category1
19/1 category2
19/1/1 category3
19/1/1/1 category4

MySQL 5.x Variables de liaison interne et solutions d'auto-connexion

<code class="language-sql">SELECT * FROM products WHERE id LIKE '19%'</code>
Copier après la connexion
mysql 5.x Une autre option consiste à créer des requêtes récursives avec des variables internes, des identifiants de chemin ou une connexion auto-connectée. Voici des exemples de variables internes:

Définissez la valeur dans comme l'ID de nœud parent du nœud pour récupérer son nœud enfant.

<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
Résumé

MySQL fournit une variété de méthodes pour écrire des requêtes récursives pour traiter les données hiérarchiques. La méthode à choisir dépend des exigences spécifiques de la version et de la requête MySQL. @pv := '19'

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