Vissa databasmärken (t.ex. Oracle, Microsoft SQL Server) stöder extra SQL-syntax för att köra "rekursiva frågor" men MySQL stöder inte någon sådan lösning.
Problemet du beskriver är detsamma som att representera en trädstruktur i en SQL-databas. Du har bara ett långt, magert träd.
Det finns flera lösningar för att lagra och hämta den här typen av datastruktur från en RDBMS. Se några av följande frågor:
- "Vad är det mest effektiva/eleganta sättet att analysera ett platt bord till ett träd? "
- "Är det möjligt för att göra en rekursiv SQL-fråga ? "
Eftersom du nämner att du vill begränsa "djupet" som returneras av frågan, kan du uppnå detta när du frågar listan på detta sätt:
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 kommer att fungera som melass, och resultatet kommer tillbaka allt på en rad (per länkad lista), men du får resultatet.