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