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 :
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!