webForumDet fria alternativet

Lista sidträd

3 svar · 478 visningar · startad av Hyzac

HyzacMedlem sedan mars 200475 inlägg
#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 :)

spangoMedlem 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.

LarsGMedlem 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.

HyzacMedlem 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

257 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
129 ms — hämta forumlista (db)
126 ms — hämta statistik (db)
125 ms — hämta tråd, inlägg och bilagor (db)