webForumDet fria alternativet

Lista sidträd

Databaser & SQLur Databashanterare & SQL

3 svar · 478 visningar · startad av Hyzac

Medlem sedan mars 200475 inlägg
Frågan#1

Jag har en tabell som består av sidor med id, name och parent. Den refererar alltså sig själv när det kommer till undersidor. Jag skulle vilja få en sorterad lista som listar sidorna i ordningen:

id namn pId
1 sida1 0
2 usida1 1
3 sida2 0

Den hämtar alltså först en parent sida och sedan dess barn och sedan nästa parent-sida osv.

Tack på förhand :)

Medlem sedan juni 20008 205 inlägg
#2

Går inte med standard-SQL. Du får antingen göra en rekursiv funktion som hämtar ut från databasen eller någon DBMS-specifik rekursiv query.

Medlem sedan dec. 200012 464 inlägg
#3

Jo, om databasen har stöd för with så går det med standard sql. Finns i t.ex. SQL server och DB2.

Medlem sedan mars 200475 inlägg
#4

Det är SQL 2005 som jag jobbar i. Har kollat lite på det här med with men får inte till det.
Så här långt har jag kommit:

WITH mSiteMap (Parent, Id, Title, Level)
AS
(
    SELECT e.Parent, e.Id, e.Title, 0 AS Level
    FROM SiteMap AS e
    WHERE Parent = 0
    UNION ALL
    SELECT e.Parent, e.Id, e.Title, Level + 1
    FROM SiteMap AS e
	INNER JOIN mSiteMap AS s
		ON e.Parent = s.Id
)
SELECT Parent, Id, Title, Level
FROM mSiteMap

Men den ordnar det bara i nivåerna, alltså först kommer nivå 0 sen 1, sen två
inte 0, 1, 1.1, 1.2, 2, 2.1 osv

124 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)