Mysql
 sql >> Base de données >  >> RDS >> Mysql

Récupération de la liste liée dans la base de données MySQL

Certaines marques de bases de données (par exemple, Oracle, Microsoft SQL Server) prennent en charge une syntaxe SQL supplémentaire pour exécuter des "requêtes récursives", mais MySQL ne prend pas en charge une telle solution.

Le problème que vous décrivez est le même que celui de la représentation d'une arborescence dans une base de données SQL. Vous avez juste un arbre long et maigre.

Il existe plusieurs solutions pour stocker et récupérer ce type de structure de données à partir d'un SGBDR. Consultez certaines des questions suivantes :

Puisque vous mentionnez que vous souhaitez limiter la "profondeur" renvoyée par la requête, vous pouvez y parvenir en interrogeant la liste de cette manière :

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

Cela fonctionnera comme de la mélasse et le résultat reviendra sur une seule ligne (par liste liée), mais vous obtiendrez le résultat.