Niektóre marki baz danych (np. Oracle, Microsoft SQL Server) obsługują dodatkową składnię SQL do uruchamiania „zapytań rekurencyjnych”, ale MySQL nie obsługuje żadnego takiego rozwiązania.
Opisywany problem jest taki sam, jak przedstawianie struktury drzewa w bazie danych SQL. Masz po prostu długie, chude drzewo.
Istnieje kilka rozwiązań do przechowywania i pobierania tego rodzaju struktury danych z RDBMS. Zobacz niektóre z następujących pytań:
- ”Jaki jest najbardziej wydajny/elegancki sposób przetworzenia płaskiego stołu na drzewo? ”
- "Czy to możliwe zrobić rekurencyjne zapytanie SQL ? ”
Ponieważ wspomniałeś, że chcesz ograniczyć „głębokość” zwracaną przez zapytanie, możesz to osiągnąć podczas odpytywania listy w ten sposób:
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);
Będzie działać jak melasa, a wynik zostanie zwrócony w jednym wierszu (na połączoną listę), ale otrzymasz wynik.