Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Treeview mit PHP/MySQL für Forum

Empfohlene Antworten

Veröffentlicht

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.

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

  • 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.

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

  • 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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.