Veröffentlicht 28. August 200421 j Hallo, ich möchte mir auf meiner Homepage ein kleines Forum machen, und zwar solldabei ein Treeview der Postings angezeigt werden. Ich habe in der Datenbanktabelle die Felder ID - Eindeutige Nummer für jedes Post Followup - Übergeordnetes Post Eben - Ebene des Post Die Frage ist jetzt, wie bekomme ich daraus einen Treeview? Die einzige Möglichkeit die mir bis jetzt eingefallen ist, wäre, dass ich für jedes Post einen neuen Select mache, indem ich überprüfe ob es auf diese Nachricht schon eine Antwort gibt. Also etwa so: select * from tabelle where followup = akutelle_id. Das ganze in eine rekursive Funktion gepackt, und der Endpunkt ist, wenn es keine Antworten gibt. Jedoch würden dass schon bei ein paar Postings ziemlich viele Select Abfragen sein, vor allem weil ich auf schlecht feststellen kann, welches Post schon gefunden wurde und ich so auch noch unnötige Abfragen habe. Weiss noch jemand eine andere Möglichkeit? Ich kann auch die DB-Tabelle ändern, falls da jemand eine Möglichkeit weiss.
28. August 200421 j Hi, schau dir mal: Das 'Nested Sets' Modell - Bäume mit SQL http://www.develnet.org/36.html an. Ist aber nicht gerade einfach. Gruß Jaraz
28. August 200421 j Autor hmm, wird das auch in richtigen Foren verwendet? Das Einfügen von Posts ist ja wirklich sehr aufwändig. I hab da noch ne andere Idee, muss ich mal morgen testen, ob die so funktioniert.
30. August 200421 j Autor Ich hab das mit den Nested Sets jetzt mal ausprobiert, und ich glaub ich habe das auch soweit verstanden. Nur was ich absolut nicht verstehe ist der Select zum Auslesen des Baumes. SELECT node1.payload, COUNT(*) AS level FROM bl_f_msg as node1, bl_f_msg as node2 WHERE node1.root_id = 1 AND node2.root_id = 1 AND node1.lft BETWEEN node2.lft AND node2.rgt GROUP BY node1.lft[/PHP] Ich versteh da gar nicht, warum das rauskommt, was rauskommt. Hab schon einwenigs rumprobiert, aber bin zu keinem Ergebnis gekommen. Ich bräuchte es halt so, dass der Select nicht nur den Teilbaum mit der Wurzel 1 ausspuckt, sondern eben alle. Aber das kommt sich ja mit dem COUNT(*) ins Gehege. Die andere Möglichkeit wäre natürlich wieder, erst alle root_ids auszulesen, und anschliessend diesen Select für jede root_id einmal auszuführen, was aber uU wieder ziemlich viele selects gibt.
30. August 200421 j Post 1: Ja, manche Foren setzen das ein, da ja viel öfter gelesen wird als geschrieben. Post 2: Jeder Thread hat eine Wurzel. Wieso willst du mehrere Threads auf einmal anzeigen? Gruß Jaraz
31. August 200421 j Autor Weil ich eigentlich ursprünglich wollte, dass alle Threads komplett ausgeklappt sind, wie im Windows Explorer, da kannst du auch mehrere Verzeichnisse gleichzeitig ausklappen. Habs aber jetzt so gelöst, dass man nur die ganzen Wurzeln zieht, und nur ein Thread ausgeklappt wird. Den SELECT versteh ich aber immernoch nicht ganz.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.