Nogle databasemærker (f.eks. Oracle, Microsoft SQL Server) understøtter ekstra SQL-syntaks til at køre "rekursive forespørgsler", men MySQL understøtter ikke nogen sådan løsning.
Problemet du beskriver er det samme som at repræsentere en træstruktur i en SQL-database. Du har bare et langt, tyndt træ.
Der er flere løsninger til at gemme og hente denne form for datastruktur fra en RDBMS. Se nogle af følgende spørgsmål:
- "Hvad er den mest effektive/elegante måde at parse et fladt bord til et træ? "
- "Er det muligt for at lave en rekursiv SQL-forespørgsel? "
Da du nævner, at du gerne vil begrænse "dybden", der returneres af forespørgslen, kan du opnå dette, mens du forespørger på listen på denne måde:
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);
Det fungerer som melasse, og resultatet kommer tilbage på én række (pr. linket liste), men du får resultatet.