Beberapa merek database (misalnya Oracle, Microsoft SQL Server) mendukung sintaks SQL tambahan untuk menjalankan "kueri rekursif" tetapi MySQL tidak mendukung solusi semacam itu.
Masalah yang Anda gambarkan sama dengan merepresentasikan struktur pohon dalam database SQL. Anda hanya memiliki pohon yang panjang dan kurus.
Ada beberapa solusi untuk menyimpan dan mengambil struktur data semacam ini dari RDBMS. Lihat beberapa pertanyaan berikut:
- "Apa cara paling efisien/elegan untuk mengurai tabel datar menjadi pohon? "
- "Apakah mungkin untuk membuat kueri SQL rekursif ? "
Karena Anda menyebutkan bahwa Anda ingin membatasi "kedalaman" yang dikembalikan oleh kueri, Anda dapat mencapainya saat menanyakan daftar dengan cara ini:
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);
Ini akan bekerja seperti molase, dan hasilnya akan kembali semua dalam satu baris (per daftar tertaut), tetapi Anda akan mendapatkan hasilnya.