Някои марки бази данни (напр. Oracle, Microsoft SQL Server) поддържат допълнителен SQL синтаксис за изпълнение на „рекурсивни заявки“, но MySQL не поддържа такова решение.
Проблемът, който описвате, е същият като представянето на дървовидна структура в SQL база данни. Просто имате дълго, кльощаво дърво.
Има няколко решения за съхранение и извличане на този вид структура от данни от RDBMS. Вижте някои от следните въпроси:
- "Кой е най-ефективният/елегантен начин за анализиране на плоска таблица в дърво? "
- "Възможно ли е да направите рекурсивна 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);
Той ще работи като меласа и резултатът ще се върне на един ред (на свързан списък), но ще получите резултата.