Sortere MySQL output

Tags:    php

Hej Udviklere

Sidder lige og roder lidt med at sortere MySQL output.

Jeg har en tabel med følgende koloner: id(unik), forrige, gruppe

id = unikt gruppe id
forrige = id på forrige gruppe, hvis 0 ingen forgående gruppe
gruppe = gruppens navn

Outputtet skal sorteres således:

1. if($forrige==0) -> Hovedgruppe
2. if(!$forrige==0) -> Undergruppe til gruppe $id

Sorteringen skulle gerne blive udskrevet som eksemplet neden for:

Hoved gruppe
->Undergruppe
->->Undergruppe
->Undergruppe
->Undergruppe
Hoved gruppe

MVH
Groyk.dk
Simon Madsen

[Redigeret d. 27/11-03 09:52:50 af Simon Madsen]

[Redigeret d. 27/11-03 10:02:03 af Simon Madsen]



3 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato


$query = mysql_db_query("$database", "select * from $tabel where etellerandet = 'hovedgruppe'");
if($subquery && mysql_num_rows($subquery) > 0) {
while($rows = mysql_fetch_row($subquery)) {
// hovedgruppe her ....
$query2 = mysql_db_query("$database", "select * from $tabel where etellerandet = 'undergruppe'");

if($subquery && mysql_num_rows($subquery) > 0) {
while($rows = mysql_fetch_row($subquery)) {
// Undergrupper her .......
}
}
}
}

Måske det kan bruges

Jonny Højdam
www.unlike.dk // www.2501.dk



Kender du det maksimale antal niveauer på forhånd?

Nedenstående antager at det maksimale antal er 2

SQL:

SELECT t1.id, t1.gruppe, t2.id, t2.gruppe
FROM <tabel> t1 LEFT OUTER JOIN <tabel> t2 ON t1.forrige = t2.id
ORDER by t1.id, t2.id

Læg mærke til at t1 og t2 er samme tabel!

Hvis maks. antallet af niveauer er 3 kan du bare tilføje endnu en outer join og endnu et sorteringskriterie.

Kender du IKKE det maksimale antal niveauer er det mest effektive at pille alle data ud af tabellen og håndtere spørgsmålet i PHP koden. Du kan ikke klare det udelukkende vha. SQL udtryk uden at lave alt for mange SQL forspørgsler... og det er ikke effektivt!


[Redigeret d. 27/11-03 15:17:48 af Erik K. Aarslew-Jensen]



Kender du det maksimale antal niveauer på forhånd?

Nedenstående antager at det maksimale antal er 2

SQL:

SELECT t1.id, t1.gruppe, t2.id, t2.gruppe
FROM <tabel> t1 LEFT OUTER JOIN <tabel> t2 ON t1.forrige = t2.id
ORDER by t1.id, t2.id

Læg mærke til at t1 og t2 er samme tabel!

Hvis maks. antallet af niveauer er 3 kan du bare tilføje endnu en outer join og endnu et sorteringskriterie.

Kender du IKKE det maksimale antal niveauer er det mest effektive at pille alle data ud af tabellen og håndtere spørgsmålet i PHP koden. Du kan ikke klare det udelukkende vha. SQL udtryk uden at lave alt for mange SQL forspørgsler... og det er ikke effektivt!


[Redigeret d. 27/11-03 15:17:48 af Erik K. Aarslew-Jensen]


Hej igen

Har fået det til at virke, med udtræk fra MySQL

her er koden
Fold kodeboks ind/udKode 


Tror det er den letteste løsning. Hvis der er en der har en bedre ide, f.eks. via en sortering med PHP vil jeg da gerne høre denne.

Groyk.dk
Simon Madsen

PS: antalet af niveauer kendes ikke på forhånd!



t