Récupérer une liste chaînée à partir d'une base de données MySQL
Récupérer des données à partir d'une structure de liste chaînée stockée dans une base de données MySQL dans le bon ordre peut être difficile, car MySQL ne prend pas en charge les requêtes récursives.
Solution 1 : jointures imbriquées
Bien que MySQL ne fournisse pas de prise en charge native des requêtes récursives, vous pouvez obtenir un effet similaire en utilisant des requêtes imbriquées. rejoint. En joignant plusieurs instances de la même table, vous pouvez parcourir la liste chaînée dans l'ordre. La requête suivante illustre cette approche, mais il convient de noter qu'elle peut être inefficace pour les grandes listes chaînées en raison de sa structure imbriquée :
<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>
Solution 2 : Analyse externe
Une autre solution consiste à récupérer les données de manière non ordonnée à l'aide d'une requête SELECT standard, puis à analyser la structure de la liste chaînée côté client. Cette approche est plus efficace pour les structures de données arborescentes complexes.
Solutions logicielles externes
Certaines marques de bases de données, telles qu'Oracle et Microsoft SQL Server, proposent des SQL supplémentaires syntaxe pour les requêtes récursives. Cependant, cette fonctionnalité n'est pas prise en charge par MySQL.
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!