webForumDet fria alternativet

Databasstruktur för meny

Webbutveckling

3 svar · 238 visningar · startad av Peeer

Medlem sedan mars 20025 907 inlägg
Frågan#1

Hur bygger man upp databasstrukturen för en meny på bästa sätt. Menyn ska vara i flera nivåer (rubriker, underrubriker, länkar) och länkarna kan förekomma i alla nivåer (de behöver alltså inte ligga under någon rubrik). För att krånga till det ännu mer så vill jag kunna ställa in vilken placering en viss länk ska ha i menyn (dvs, jag ska ex. kunna göra så att. länk4 hamnar sist i rubrik2, medans underrubrik3 läggs överst i rubrik2).

*Rubrik1
	*underrubrik1
		*länk1
		*länk2
	*underrubrik2
		*länk3
*Rubrik2
	*länk4
	*underrubrik3
		*länk5
	*länk6
*länk7
osv..

Hur sjutton bygger man upp det här? Och hur får man ut menyn med så få sql-satser som möjligt?

Ytterst tacksam för hjälp :)

dbms: mysql 4.0.13

Medlem sedan maj 20018 027 inlägg
#2

Vad som krånglar till allt, är att du vill kunna bestämma ordningen på allt. Men vi gör ett litet försök. Du skulle kunna utgå från en enda tabell, vars poster kan vara både rubriker och länkar. Den innehåller även ordningstal för att sortera allt som du vill ha det:

tbl_rubrik_lank
--------------------------
id (PK) 
rubrik_lank (1=rubrik, 0=länk)
parentID (FK(tbl_rubrik_lank)) referens till en rubrik i samma tabell
namn (som visas upp för användaren)
content (rubriken eller länken, är väl http-referenser i båda fallen?)
ordning (ordningstal som du ska sortera med)

Sedan kan du för varje rubrik fylla på med innehåll med hjälp av:
select * from tbl_rubrik_lank where parentID=<aktuell rubriks id> order by ordning

Kruxet är hur du uppdaterar ordningstalen. Antagligen blir du tvungen att uppdatera fältet "ordning" för alla poster under en viss underrubrik när du ändrar ordningen.

Om du ska ha många poster i din rubrikhierarki, rekommenderar jag att du ställer frågor till databasen allt eftersom du expanderar varje rubrik.

Medlem sedan mars 20025 907 inlägg
#3

Mjo, det får bli något sådant. Hade först hoppats på att man skulle kunna få ut hela menyn på en gång, och sen sköta själva "meny-bläddrandet" med javascript och lager, men men.. får refresha istället då.
Tack :)

Medlem sedan mars 20025 907 inlägg
#4

Jag ändrar mig lite. Säg att det max är 2 nivåer. dvs rubriker och länkar. Är det då möjligt att få ut _hela_ menyn (dvs båda rubriker och länkar) utan att använda nästlade sql-satser? Om jag använder UlfTs modell, så vill jag få ut (först insorterade under rätt rubrik (om länken/rubriken inte ligger i menyrooten, dvs parentID = NULL), sen sorterat efter ordningstalet.
ex.

id	rubrik_lank	parentID	namn	ordning
1	0		NULL		Länk1	1
2	1		NULL		Rubrik1	2
3	0		2		Länk2	1
4	0		2		Länk3	2
5	0		2		Länk4	3
6	1		NULL		Rubrik2	3
osv..
247 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
119 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)