Maison > base de données > tutoriel mysql > Comment récupérer des données d'une liste chaînée dans MySQL sans requêtes récursives ?

Comment récupérer des données d'une liste chaînée dans MySQL sans requêtes récursives ?

DDD
Libérer: 2024-11-01 02:31:02
original
460 Les gens l'ont consulté

How to Retrieve Data from a Linked List in MySQL Without Recursive Queries?

Récupération de données de liste chaînée dans MySQL

Dans une base de données MySQL, vous rencontrez une structure de table comme celle fournie ci-dessous :

table
    id INT NOT NULL PRIMARY KEY
    data ...
    next_id INT NULL
Copier après la connexion

La tâche consiste à récupérer les données selon l'ordre de la liste chaînée. Prenons comme exemple les données suivantes :

id next_id
1 2
2 4
3 9
4 3
9 NULL

Le résultat doit être dans cet ordre : 1, 2, 4, 3, 9.

Cependant, contrairement à certaines bases de données comme Oracle et Microsoft SQL Server, MySQL ne prend pas en charge les requêtes récursives. Ce problème ressemble à la représentation d'un arbre dans une base de données SQL, en particulier un arbre fin et allongé.

Différentes solutions existent pour gérer ce type de structure de données :

  • [Représentation des structures arborescentes en SQL Bases de données](https://stackoverflow.com/questions/2321851/what-is-the-most-efficient-elegant-way-to-parse-a-flat-table-into-a-tr)
  • [Requêtes SQL récursives](https://stackoverflow.com/questions/71469/is-it-possible-to-make-a-recursive-sql-query)

Pour limiter la requête "profondeur", utilisez la technique suivante :

<code class="sql">SELECT * FROM mytable t1
 LEFT JOIN mytable t2 ON (t1.next_id = t2.id)
 LEFT JOIN mytable t3 ON (t2.next_id = t3.id)
 LEFT JOIN mytable t4 ON (t3.next_id = t4.id)
 LEFT JOIN mytable t5 ON (t4.next_id = t5.id)
 LEFT JOIN mytable t6 ON (t5.next_id = t6.id)
 LEFT JOIN mytable t7 ON (t6.next_id = t7.id)
 LEFT JOIN mytable t8 ON (t7.next_id = t8.id)
 LEFT JOIN mytable t9 ON (t8.next_id = t9.id)
 LEFT JOIN mytable t10 ON (t9.next_id = t10.id);</code>
Copier après la connexion

Malgré ses performances lentes, cette requête produit une seule ligne pour chaque liste chaînée.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal