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
function undergrp($forrige,$niveau) {
$resultat = mysql_query("select * from varegrp WHERE forrige='$forrige' ORDER BY grp") or die(mysql_error());
while ($grp = mysql_fetch_array($resultat))
{
extract($grp);
// Beregner indrykningen efter niveau nr.
for ($i = $niveau; $i > 0; $i--) {
$afs .= " ";
}
$afs .= "-> ";
echo "$afs$grp<br>";
undergrp($id,$niveau+1);
}
}
$resultat = mysql_query("select * from varegrp") or die(mysql_error());
while ($raekke = mysql_fetch_array($resultat))
{
extract($raekke);
echo "$grp<br>";
undergrp($id,0);
}
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!