Dr. Creutzfeld
Bloody Newbie
|
Ich steh derzeit vor dem Problem dass ich eine ganze Latte von Artikeln ausgeben möchte, die jedoch "verzeichnisartig" verschachtelt sind.. Jeder Artikel bezieht sich auf nen anderen. artikel `-artikel |-artikel |-artikel | `-artikel `-artikel artikel |-artikel |-artikel `-artikelwürde folgender Kode funktionieren? function links($quelle = 0)
{
$ressourceid = mysql_query("SELECT kurztitel, ID FROM artikel WHERE quelle=$quelle SORT BY reihenfolge ASC;");
$datensatz = mysql_fetch_assoc($ressourceid));
while($datensatz)
{
printf('%s',$datensatz[kurztitel]);
links($datensatz[ID]);
}
}
was der kode machen soll: Den Kurztitel des ersten Datensatzes ausgeben, desen Spalte 'Quelle' den Wert 0 hat. Dann: Den Kurztitel der Datensätze ausgeben, die sich auf den ebengenannten Datensatz beziehen, dh. deren Spalte 'Quelle' den Wert der 'ID' des ersten Datensatzes hat. PS: Ich weis dass da vermutlich noch einige Fehler drin sind bzw. einiges fehlt ("OR die(mysql_error());" gehört da afaik noch wo rein), jedoch gehts mir ATM nur um die Logik die dahinter steckt.. Irgendwelche Tippfehler interessieren mich atm net. Wenn damit fertig -> Weitermachen mit dem Ausgeben der Datensätze mit 'quelle'=0.
Bearbeitet von Dr. Creutzfeld am 06.01.2004, 11:34
|
watchout
Legendundead
|
ja, also es fehlt dir mal ein funktionsname... dann glaub ich kaum dass dir jemand helfen kann wenn er deinen db-aufbau net kennt - abgesehen davon glaub ich nicht dass dein code auch nur annähernd das gewünschte ergebnis liefert
|
Dr. Creutzfeld
Bloody Newbie
|
ja, also es fehlt dir mal ein funktionsname... ROFL, ganz übersehn :lol: @datenbankaufbau: eine einzige Tabelle, Spaltennamen: - ID - quelle - reihenfolge - kurzname - Autor - Inhalt der Inhalt von 'quelle' ist die 'ID' des übergeordneten Artikels.
|
watchout
Legendundead
|
ah, versteh - sollte deine funktion zufällig "links" heissen?
|
Dr. Creutzfeld
Bloody Newbie
|
worin meiner Meinung nach die Schwierigkeit besteht: $datensatz = mysql_fetch_assoc($ressourceid)); gibt nach der Reihe sämtliche Datensätze aus auf die der SQL-Befehl zutrifft. Gerade wenn der erste Datensatz geliefert wurde, wird dieser erste Befehl jedoch von einem zweiten unterbrochen.. (Nämlich genau dann, wenn sich links($quelle) selber neu startet) Jedoch muss nachher mit der Ausgabe des ersten Befehls fortgefahren werden.. Geht das? ah, versteh - sollte deine funktion zufällig "links" heissen? jup. Hab den ersten Post editiert..
|
watchout
Legendundead
|
function links($quelle = 0)
{
$ressourceid = mysql_query("SELECT kurztitel, ID FROM artikel WHERE quelle=$quelle SORT BY reihenfolge ASC;");
while($datensatz = mysql_fetch_assoc($ressourceid)))
{
printf('%s',$datensatz[kurztitel]);
links($datensatz[ID]);
}
}
die abfragen sollten sich nicht gegenseitig stören, da $ressourceid eine lokale (und daher auf den aktuellen funktionsaufruf beschränkte variable is und sich mysql an eben dieser id orientiert ich hab da noch einen fehler von dir ausgebessert wenn die funktion links heisst is es ja doch nicht so falsch
|
Dr. Creutzfeld
Bloody Newbie
|
die abfragen sollten sich nicht gegenseitig stören, da $ressourceid eine lokale (und daher auf den aktuellen funktionsaufruf beschränkte variable is und sich mysql an eben dieser id orientiert ah, sehr gut.. ich hätte ansonsten nämlich keine Ahnung gehabt wie ich das sonst noch realisieren könnte btw: Sollte es nicht egal sein, ob $datensatz als argument von while() oder als eigener Befehl deklariert wird?
|
dio
Here to stay
|
also ich habs so gelöst, dass ich die unterteilungen abgefragt habe, und zu jeder unterteilung eine abfrage die wieder nach unterteilungen sucht... hab allerdings eine andere db struktur
|
watchout
Legendundead
|
btw: Sollte es nicht egal sein, ob $datensatz als argument von while() oder als eigener Befehl deklariert wird? nein, weil bei einem aufruf der funktion nur ein datensatz des ergebnisses zurückgegeben wird.
|
Dr. Creutzfeld
Bloody Newbie
|
sry, versteh ich jetzt nicht ganz.. wenn mysql_fetch_assoc($ressourceid) FALSE zurückliefert, wird dieses FALSE doch eh $datensatz zugewiesen.. und wenn $datensatz als argument von while() angegeben wird, sollte dies doch schlußendlich imho aufs selbe rauskommen?
|
watchout
Legendundead
|
ja, aber is die schleife dann ne endlosschleife, weil $datensatz _immer_ true is wennst es net checkst glaub mir einfach - es stimmt irgendwann geht dir vielleicht der knopf auf, lies dir am besten die doku ein paarmal durch
|
semteX
begehrt die rostschaufel
|
ich habe das problem bei mir so gelöst:
jeder artikel hatte in der db ein feld namens SUB. das enthielt die ID von der untergruppe. Dann spang er zu der id, gab alles aus, checkte ob SUB vorhanden war ==> wenn ja ==> sprung zu SUB ==> wenn nein => raus
|
tomstig
OC Addicted
|
was er mit der schleife machen wollte geht nur mit arrays [z.b. while($ergebnis = mysql_fetch_assoc($wie_auch_immer)){ ] und zur mysql abfrage: mach "SELECT * FROM ..."... weil obst du nur einen haben willst oder viele, ausgeben musst du immer mit $ergebnis['wie_auch_immer']... ich hab mich auch grad mit so was beschäftigt, nur bei mir war es ein menü mit untermenüs.... wenn du mir ein bisschen genauer erklärst was du willst (hab es nicht ganz verstanden), kann ich kurz schauen, ob der quellcode passt und ihn hier reinstellen
|
Dr. Creutzfeld
Bloody Newbie
|
ja, aber is die schleife dann ne endlosschleife, weil $datensatz _immer_ true is ich glaub ich habs jetzt verstanden.. " mysql_fetch_assoc($ressourceid)" liefert pro Aufruf einen kompletten Datensatz, beim nächsten Aufruf dann den nächsten Datensatz usw. Da " $datensatz = mysql_fetch_assoc($ressourceid));" jedoch außerhalb der while-Schleife steht, wird " mysql_fetc..." nur einmal aufgerufen -> $datensatz behält immer den Inhalt des ersten Datensatzes -> $datensatz ist immer TRUE. stimmt diese Erklärung? @tomstig: Ich denke hier ist es besser erklärt als ich es könnte: http://tut.php-q.net/recursion.html#u4 (circa eine A4-Seite runterscrollen) Wenn du dich fragst warum ich nicht gleich den Code nehme der dort abgebildet ist: 1. ist er mir zu aufgebläht 2. will ichs selber lernen (O_o) Aus diesem Grund muss ich auch vorerst auf dein Angebot mir deinen Code zu überlassen verzichten.. aber Danke für das Angebot!
|
watchout
Legendundead
|
creutzfeld, is das ne hausaufgabe oder wie? edit: ja, hört sich gut an
|