Maison  >  Article  >  base de données  >  MySQL peut-il récupérer les données de listes chaînées sans traitement côté client ?

MySQL peut-il récupérer les données de listes chaînées sans traitement côté client ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-04 08:38:30836parcourir

Can MySQL Retrieve Linked List Data Without Client-Side Processing?

Récupération des données de liste chaînée à partir de la base de données MySQL

Question :

Étant donné une table de base de données MySQL avec la structure :

table
    id INT NOT NULL PRIMARY KEY
    data ..
    next_id INT NULL

Pouvez-vous récupérer les données dans l'ordre de la liste chaînée à l'aide d'une requête de base de données, sans recourir au traitement côté client ?

Réponse :

Malheureusement, MySQL ne prend pas en charge les requêtes récursives, qui sont nécessaires pour récupérer efficacement les données des listes chaînées. Ce problème est analogue à la représentation d'une structure arborescente dans une base de données relationnelle.

Approches alternatives :

Référez-vous aux questions suivantes pour connaître les méthodes alternatives de stockage et de récupération de type arborescent données provenant d'un système de base de données relationnelle :

  • "Quelle est la manière la plus efficace/élégante d'analyser une table plate dans un arbre ?"
  • "Est-il possible de créer un SQL récursif requête ?"

Requête avec une profondeur limitée :

Si vous souhaitez limiter la profondeur du résultat de la requête, vous pouvez utiliser l'approche suivante, mais avec mauvaises performances :

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

Le résultat sera renvoyé sur une seule ligne pour chaque liste chaînée, mais les performances de la requête seront lentes.

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