webForumDet fria alternativet

sökväg i träd

Databaser & SQL

2 svar · 378 visningar · startad av daniel_ra

Medlem sedan jan. 2002381 inlägg
Frågan#1

hej hej

jag har skapat en trädstruktur där saker hör till olika kategorier. databasen ser ut som följande

ID | namn | subID

varje ID hör alltså till ett annat ID, exempel:

ID | namn | subID

0 | root | 0
1 | fordon | 0
2 | bil | 2
3 | båt | 2

jag vill kunna skriva ut sökvägen till en speciell kategori. exempelvis

root/fordon/bil

detta så att jag lättare kan navigera mellan de olika kategorierna. Hur skulle jag kunna skriva min sqlfråga för få ut detta för en speciell kategori?

Medlem sedan dec. 19996 721 inlägg
#2

Om du har en begränsad mängd nivåer kan du få ut det i en fråga.

SELECT ISNULL('/' + t3.namn,'') + ISNULL('/' + t2.namn,'') + '/' + t1.namn 
FROM tabellen t1
LEFT OUTER JOIN tabellen t2 ON t2.ID=t1.subID
LEFT OUTER JOIN tabellen t3 ON t3.ID=t2.subID

Annars får du göra en rekursiv sökning (sök ut namnet, sedan namnet för föräldern, sedan förälderns förälder etc.). Om du har en databas som stöder triggers så kan du lösa det på annat sätt också.

Medlem sedan juni 20019 024 inlägg
#3

Om det är obegränsat med nivåer är det lättare med en så kallad "tree traversal".

Finns en bra guide här:
http://www.sitepoint.com/article/hierarchical-data-database

Samt:
http://en.wikipedia.org/wiki/Tree_traversal

257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)