sql >> Databasteknik >  >> RDS >> Mysql

Hämtar länkad lista i MySQL-databas

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:

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.



  1. Automatisk ökning av tabellkolumnen

  2. Ansluta till lokal SQL Server-databas med C#

  3. Konvertera tidsstämpel till datum i MySQL-fråga

  4. mysql välj dynamiska radvärden som kolumnnamn, en annan kolumn som värde