Kategorien als Links ausgeben

naty
Hallo zusammen,
hoffentlich kann mir jamand helfen.

Ich habe folgendes Problem: in der Datenbank sind Kategorien miteinander verschachtelt:
ID=1, Kategorie=Obst, Parentkategorie=0
ID=2, Kategorie=Apfel, Parentkategorie=1
ID=3, Kategorie=Gemüse, Parentkategorie=0
ID=4, Kategorie=Gurke, Parentkategorie=3...

also bei Unterkategorie ist die Parentkategorie gleich ID von Oberkategorie. Ist das klar?

Ich möchte folgende Ausgabe haben:

Obst
Apfel
Gemüse
Gurke

und bei mir sieht es so aus:
Obst
Gemüse
Apfel
Gurke


Den Script habe ich beigefügt, guckt doch mal rein. Irgendwelche Ideen? Mauer


$sql = "SELECT * FROM Kategorie order by Parentkategorie";
$ergebnis = mysql_query ($sql);

//Verarbeitung der Abfrageergebnisse
if ($ergebnis) {
while ($row = mysql_fetch_object($ergebnis)) {
$id=htmlentities($row->id);
$Name=htmlentities($row->Name);
$Parentkategorie=htmlentities($row->Parentkategorie);

if ($Parentkategorie==0){
echo "<a href='kategorie.php?ukategorie=$id'>$Name<br></a>";
}
if ($Parentkategorie==$ukategorie){
echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
echo "<a href='kategorie.php?ukategorie=$ukategorie&uukategorie=$id'>$Name<br></a>";
}
if ($Parentkategorie==$uukategorie){
echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
echo "<a href='kategorie.php?uuukategorie=$id'>$Name<br></a>";
}
}
}
daHooligan
Zitat:
Original von naty

Obst
Apfel
Gemüse
Gurke


hmm... auf den ersten blick sieht das für mich so aus, als willst du, dass es nach der ID sortiert wird....
das wäre ja mit oder by ID gemacht....

kann es sein, dass du es zuerst nach "parentkategorie" und dann nach ID sortiert haben willst??? [Obst, Gemüse, Apfel, Gurke] oder versteh ich das falsch???
KillerJoe
also ich denke mal, er will überkategorie, und dann die unterkategorien,...

also mit der sql abfrage geht das auf keinen fall, dann kommen natürlich erst die mit 0, also die oberkategorien...

Ich würds in mehrere sql abfragen machen, also erst die mit 0, dann jeweils, die die kategorie mit der id haben, bsp:

erstma sql='SELECT * FROM Kategorie WHERE Parentkategorie=0';
dann im while drin sql2='SELECT * FROM Kategorie WHERE Partnerkategorie="'.$row['id'].'"';

hoffe geholfen zu haben smile
naty
Hey,

Danke für Eure Ideen smile

Ich habe das Problem zur Zeit gelöst durch mehrere Datenbankauslesen und durch neue Spalte in der Datenbank, die Unterkategorie heisst und hat entweder 0 oder 1 als Wert. Dadurch spuckt mir die DB nur die Werte, die zu einer bestimmter Oberkategorie passen und wenn es keine Unterkategorien gibt läuf die Schleife nicht mehr weiter.


Also Guten Rutsch!
KillerJoe
Oder so, aber is umständlicher, wenn ich das richtig verstanden habe,...
die unterkategorie soll nur zeigen, ob es zu dem ding n untergeordnetes gibt?

frag doch einfach alle ab, die die id als kategorie haben, wenn du keinen findest, hat sie keinen,...

nunja, egal, hauptsache es tut ^^
naty
Stimmt, Killer Joe Freude
meine Lösung ist umständlicher,
aber ich habe das, mit der sql-Anfrage in der while-schleife nicht hingekriegt, hats nicht funktioniert.
Vielleicht mache ich irgendwas falsch...

Hier ist also neue Version, villeicht kannste mir zeigen wo ich hinpacken kann...
<? php
//...
echo"<table width='98%'><tr>";
echo"<td>";
//Verarbeitung der Abfrageergebnisse
$sql = "SELECT * FROM Kategorie where Parentkategorie=0";
$ergebnis = mysql_query ($sql);
if ($ergebnis) {
while ($row = mysql_fetch_object($ergebnis)) {
$id=htmlentities($row->id);
$Name=htmlentities($row->Name);
$Parentkategorie=htmlentities($row->Parentkategorie);
$uk=htmlentities($row->uk);

if ($Parentkategorie==0){
echo "<a href='kategorie.php?ukategorie=$id&uk1=$uk'>$Name<br></a>";
}
}
}
echo"</td>";
echo"<td>";

if ($uk1=="1"){
$sql = "SELECT * FROM Kategorie where Parentkategorie=$ukategorie";
$ergebnis = mysql_query ($sql);
if ($ergebnis) {
while ($row = mysql_fetch_object($ergebnis)) {
$id=htmlentities($row->id);
$Name=htmlentities($row->Name);
$Parentkategorie=htmlentities($row->Parentkategorie);
$uk=htmlentities($row->uk);

if ($Parentkategorie==$ukategorie){
echo "<a href='kategorie.php?ukategorie=$ukategorie&uukategorie=$id&uk1=$uk1&uk2=$uk'>$Name<br></a>";
}
}
}
} if ($uk=="0") {
echo"Keine weitere Kategorien";
}

echo"</td>";


//...

?>
naty
Mit Unterkategorie haste richtig verstanden,
nur ich denke es ist einfacher einmal schauen ob diese Kategorie noch welche unterkategorien hat, statt noch mal auf die DB zugreifen um zu gucken, ob es noch welche Unterkategorien gibt, die diese Oberkategorie haben... Oder sehe ich wiede was falsch? Na ja, war nie gut im logischen Denken.