recherche
Maisonbase de donnéestutoriel mysqlComment naviguer efficacement sur des données hiérarchiques avec des requêtes récursives dans MySQL?

How to Efficiently Navigate Hierarchical Data with Recursive Queries in MySQL?

Parcours de données hiérarchiques MySQL et requête récursive

Lorsque vous traitez des données structurées hiérarchiquement dans une base de données MySQL, parcourir et récupérer efficacement différents niveaux de données peut être un défi. Cet article présentera une approche complète de la création de requêtes récursives dans MySQL, fournissant des solutions pour les versions modernes et héritées.

Requête récursive dans MySQL 8.0

MySQL 8.0 introduit la puissante syntaxe WITH RECURSIVE, vous permettant d'écrire des requêtes récursives concises et efficaces. Par exemple :

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 cte.id = p.parent_id
)
SELECT * FROM cte;

Dans cette requête, une expression de table commune (CTE) nommée cte parcourt récursivement la table products, en commençant au parent_id spécifié (ici 19), et récupère tous ses nœuds enfants.

Requête récursive pour MySQL 5.x

Avant MySQL 8.0, les requêtes récursives directes n'étaient pas prises en charge. Cependant, vous pouvez prendre deux alternatives :

Affectation des variables :

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));

Cette requête complexe utilise l'affectation de variables au sein de la requête elle-même. Il identifie de manière itérative les nœuds enfants en fonction du parent_id fourni (19 dans ce cas). Cependant, cette approche peut souffrir de problèmes de performances sur de grands ensembles de données.

Identificateur de style de chemin :

L'utilisation d'une structure d'ID arborescente avec des identifiants de style chemin simplifie les requêtes récursives. Par exemple :

CREATE TABLE products (id VARCHAR(255) PRIMARY KEY, name VARCHAR(255));
INSERT INTO products (id, name) VALUES ('19', 'category1');
INSERT INTO products (id, name) VALUES ('19/1', 'category2');
INSERT INTO products (id, name) VALUES ('19/1/1', 'category3');
INSERT INTO products (id, name) VALUES ('19/1/1/1', 'category4');

Cette approche permet un parcours hiérarchique efficace à l'aide de caractères génériques :

SELECT * FROM products WHERE id LIKE '19%';

Résumé

La méthode que vous choisissez pour les requêtes récursives dans MySQL dépend de la version spécifique utilisée et de la taille de votre ensemble de données. Pour les versions MySQL modernes, la syntaxe WITH RECURSIVE fournit une solution élégante et efficace. Pour les versions héritées, les alternatives décrites ci-dessus sont disponibles, avec des performances variables.

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!

Déclaration
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
MySQL Blob: Y a-t-il des limites?MySQL Blob: Y a-t-il des limites?May 08, 2025 am 12:22 AM

MySqlBlobShavelimits: Tinyblob (255 bytes), blob (65 535 bytes), Mediumblob (16 777 215 bytes), et Longblob (4 294 967 295 bytes). Obseffectively: 1) considérer la compréhension de l'Impacts et de laARGELLOBBOBSEXTERNELLEMENT; 2)

MySQL: Quels sont les meilleurs outils pour automatiser la création des utilisateurs?MySQL: Quels sont les meilleurs outils pour automatiser la création des utilisateurs?May 08, 2025 am 12:22 AM

Les meilleurs outils et technologies pour automatiser la création d'utilisateurs dans MySQL incluent: 1. MySQLWorkbench, adapté à des environnements petits et moyens, faciles à utiliser mais une consommation de ressources élevées; 2. ANSIBLE, adapté aux environnements multi-serveurs, courbe d'apprentissage simple mais abrupte; 3. Scripts Python personnalisés, flexibles mais doivent assurer la sécurité des scripts; 4. Puppet et chef, adapté aux environnements à grande échelle, complexes mais évolutifs. Les besoins d'échelle, de courbe d'apprentissage et d'intégration doivent être pris en compte lors du choix.

MySQL: Puis-je rechercher dans un blob?MySQL: Puis-je rechercher dans un blob?May 08, 2025 am 12:20 AM

Oui, YouCansearchInSideAblobinMysQlutingSpecifiCTechniques.1) ConvertTheBlobtoAutf-8StringWithConvertFunctionandSearchusingLiliN.2) ForcompressedBlobs, useUncompressBeForEConversion.3)

Types de données MySQL String: un guide completTypes de données MySQL String: un guide completMay 08, 2025 am 12:14 AM

MysqloffersvariousStringDatatypes: 1) CharForfixed-LengthStrings, idéalforcenthenglenthDatalikEcountryCodes; 2) varcharforvariable-lengthstrings, adaptFieldsLikenames; 3) textTypesForLargerText, bonforblogpostsbutcanimpactperformance; 4) binaryvarb

Master MySQL Blobs: un tutoriel étape par étapeMaster MySQL Blobs: un tutoriel étape par étapeMay 08, 2025 am 12:01 AM

Tomastermysqlblobs, suivi de l'essence: 1) ChooseTheApproProProprepropriéBlobType (TinyBlob, Blob, moyenblob, longblob) BasedAdatasize.2) INSERTDATAUSINGLOAD_FILEFERAFFICY

Blob Type de données dans MySQL: un aperçu détaillé des développeursBlob Type de données dans MySQL: un aperçu détaillé des développeursMay 07, 2025 pm 05:41 PM

BLOBDATATYTYSINMYSQLAREUSEUSEFORVORAGELLARGEBINALDATALIKEIMAGSORAUDIO.1) USEBLOBTYPES (TINYBLOBTOLONGBLOB) BASEDATADATASIZENEDES. 2) StoreBlobsin Perplate PetoopTime Performance.3) Considérants

Comment ajouter des utilisateurs à MySQL à partir de la ligne de commandeComment ajouter des utilisateurs à MySQL à partir de la ligne de commandeMay 07, 2025 pm 05:01 PM

ToadDuserstomysqlfromTheCommandline, LoginaSroot, TheSusecreateUser'Username '@' host'identifiedBy'password '; TOCREATEEEWUSER.GRANTERMISSIONSWITHGRANTALLPRIVILEGESONDATABASE.

Quels sont les différents types de données de chaîne dans MySQL? Un aperçu détailléQuels sont les différents types de données de chaîne dans MySQL? Un aperçu détailléMay 07, 2025 pm 03:33 PM

MysqlofferseightStringDatatypes: char, varchar, binaire, varbinaire, blob, texte, énumé

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit