Schleifen-Problem

devilzride

Grünschnabel
Hi erstmal an alle.
Dies ist mein erster Post, da ich sonst immer schön brav die Suchfunktion benutzt habe und mir so meine Fragen selber beantworten konnte (Bin ja schon länger angemeldet).
Zu meinem folgendem Problem habe ich jedoch keine Antwort gefunden:

Ich bin gerade dabei ein Forum zu machen, und als übersicht wird das in etwa wie hier gehalten, also eine Hauptkategorie, in der mehrere Unterkategorien eingeteilt sind.

Ich habe dafür 2 MYSQL-Tabellen, f_kats für die Hauptkategorie und f_skats für die enigeteilten Unterkategorien.

Jetzt wollte ich das ganze mit 2 While-Schleifen abfragen, jedoch wird immer am Ende einer nächsten Kategorie auch die Untergeordneten aus der vorigen Kategorie mit drangehängt.
Um das mal etwas zu verdeutlichen, hier ein Screeny.

Den Code den ich hierfür verwendet habe ist wie folgt:
PHP:
$qry = db("SELECT * FROM ".$db['f_kats']."
           ORDER BY kid");
while($get = mysql_fetch_array($qry))
{
  $qrys = db("SELECT * FROM ".$db['f_skats']."
              WHERE sid = '".$get['id']."'
              ORDER BY topic");
  while($gets = mysql_fetch_array($qrys))
  {
    $class = ($color % 2) ? "change" : "main"; $color++;	
    $showt .= show($dir."/kats_show", array("topic" => $get['topic'],
                                            "subtopic" => $gets['subtopic'],
                                            "lpost" => $lpost,
                                            "threads" => $gets['threads'],
                                            "posts" => $gets['posts'],
                                            "class" => $class,
                                            "id" => $gets['sid']));
  }
  $show .= show($dir."/kats", array("katname" => $get['name'],
                                    "topic" => _forum_topic,
                                    "lpost" => _forum_lpost,
                                    "threads" => _forum_threads,
                                    "posts" => _forum_posts,
                                    "showt" => $showt));

}
$threads = show(_forum_cnt_threads, array("threads" => cnt($db['f_threads'])));
$posts = show(_forum_cnt_posts, array("posts" => cnt($db['f_posts'])));

$index = show($dir."/forum", array("head" => _forum_head,
                                   "threads" => $threads,
                                   "posts" => $posts,
                                   "show" => $show));

Ich wäre für jede Hilfe sehr dankbar!

mfg, deV!L
 
Auf die Schnelle habe ich in Deinem speziellen Code den Fehler nicht gefunden.
Aber ich habe noch einen Thread, der die grundsätzliche Problematik von Kategorien und Unterkategorien angeht gefunden. Es werden verschiedene Lösungsansätze besprochen:
Struktur eines Forums
Codebeispiele sind auch ausreichend vorhanden.
 
hmm also ich habe jetzt die verschiedenen Lösungswege der Reihe nach abgearbeitet, aber immer bleibt dasselbe Problem wie auf dem Screeny.
Ich denke also nicht das es an der grundsätzlichen Lösung liegt, sondern an etwas anderem.

Wenn ich das ganze "nackt" scripte, also ohne templateausgabe, funktioniert es auch einwandfrei, nur wenn ich es das templatesystem einbinde (mit der function show und den arrays), dann klappt das alles nicht mehr.

Hat vielleicht noch jmd einen Lösungsvorschlag? Wäre für jeden hinweis dankbar :)

mfg, deV!L
 
Was macht denn die Funktion show?
Du ergänzt einmal $show und einmal $showt, Du griefst nicht wieder auf diese Variablen zu, ist das gewollt?
Kann es sein, dass in Deinem Templatesystem die alten Einträge gespeichert werden und so wieder auftauchen?
Du gibst weder $show, noch $showt aus, zumindest nicht in dem geposteten Code.
Es scheint mir so, dass in $showt am Ende das Subtopic steht. Ist das die Variable, die später ausgegeben wird?
Du löscht sie nicht im äußeren Schleifendurchlauf. Dadurch könnte es sein, dass in $showt (und auch in $show) im zweiten Durchlauf auch das aus dem ersten Durchlauf noch drinsteht.
Viele Teile Deines Codes sind halt für uns unbekannt. Daher bleibt das alles ein bisschen Rätselraten.
Und, wie erwähnt, ist Deine Methode eine der langsamsten. Je mehr DB-Querys man vermeidet, desto besser.
Seltsamerweise (für mich) machst Du alles in der inneren Schleife, so sollte es vermutlich dazu kommen, dass Du die Dinge für die Hauptkategorie doppelt machst.

Gruß hpvw
 
Zurück