MySQL mangler rekursive forespørgsler, som er en del af standard SQL. Mange andre mærker af databaser understøtter denne funktion, inklusive PostgreSQL (se http://www.postgresql.org/docs/8.4/static/queries-with.html ).
Der er flere teknikker til at håndtere hierarkiske data i MySQL.
- Det enkleste ville være at tilføje en kolonne for at notere det hierarki, som et givet billede tilhører. Derefter kan du søge efter de billeder, der tilhører det samme hierarki, hente dem alle tilbage til din ansøgning og finde ud af dem, du skal bruge der. Dette er lidt spild med hensyn til båndbredde, kræver, at du skriver mere applikationskode, og det er ikke godt, hvis dine træer har mange noder.
Der er også et par smarte teknikker til at gemme hierarkiske data, så du kan forespørge dem:
-
Stioptælling gemmer listen over forfædre med hver node. For eksempel vil foto 5 i dit eksempel gemme "0-2-4-5". Du kan søge efter forfædre ved at søge efter noder, hvis sti sammenkædet med "%" matcher 5's sti med en
LIKE
prædikat. -
Indlejrede sæt er en kompleks, men klog teknik populær af Joe Celko i hans artikler og hans bog "Trees and Hierarchical in SQL for Smarties." Der er også mange online blogs og artikler om det. Det er nemt at forespørge i træer, men svært at forespørge på umiddelbare børn eller forældre og svært at indsætte eller slette noder.
-
Lukningstabel indebærer lagring af hvert forfader/efterkommer forhold i en separat tabel. Det er nemt at forespørge i træer, nemt at indsætte og slette, og nemt at forespørge umiddelbare forældre eller børn, hvis du tilføjer en stilængde kolonne.
Du kan se mere information, der sammenligner disse metoder i min præsentation Praktisk objekt -Orienterede modeller i SQL eller min kommende bog SQL Antipatterns:Avoiding the Pitfalls of Database Programming .