"Verschachtelte" Kommentar funktion

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Skippy
Mitglied
Beiträge: 212
Registriert: 19.08.2006 11:10
Wohnort: Eisenberg

"Verschachtelte" Kommentar funktion

Beitrag von Skippy »

Entschuldigung für die Schreckliche überschrift aber mir viel leider nix besseres ein

ich möchte eine Kommentarfunktion realisieren.
(eine normale einreihige also wie das forum hier existiert schon)

Beitrag1
|
Beitrag2
|
Beitrag3

ich suche eine Möglichkeit folgendes zu realisieren


Beitrag1
| |
| |_Beitrag3
|
Beitrag2

in 2 ebenen würde schon völlig reichen

das ganze ist für einen Blog
man kann also 20-200Antworten pro Blog eintrag rechnen

Nun zu den Fragen
1.Kann ich das Problemlos also ohne Geschwindigkeitsprobleme mit 1 Tabelle regeln?
2.Wenn ja wie?


Ich kenne eine Variante mit 2 Tabellen

dabei wird die erste in einer schleife durchlaufen und für jeden Beitrag wird in der 2ten Tabelle nach "untergeordneten" Beiträgen gesucht

lohnt sich dort eine Optimierung ?

meine Idee währe erst die erste Tabelle komplett zu durchlaufen und alle infos in ein array zu packen und dann mithilfe der gesammelten Ids erst die 2te um dann alles gemeinsam auszugeben
Galvano-atelier--für alle die Galvanisieren als Hobby betreiben
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Eigentlich ist das was du vorschlägst schon mit einer Tabelle zu regeln.
Da du ja wohl jedem Beitrag eine eindeutige ID vergibst kannst du die prima verwenden um in einer weiteren Spalte einen "parent" zu definieren.

Bei der SQL Abfrage musst du dann allerdings - wenn du die Posts nicht gerade nach ID des Parent sortieren möchtest - ein paar kleinere Verrenkungen machen und zu jedem Post auch die Sortierkriterien des Parents Joinen, also (ohne direkten Bezug zum phpbb) etwa so:

Code: Alles auswählen

SELECT p.datum, d.* FROM beiträge d LEFT JOIN beiträge p ON d.parent_id = p.id
Damit das funktioniert müssen dann die top-level Einträge sich selbst als parent enthalten, ansonsten gibt's eine NULL nach der sich nicht so gut sortieren lässt. Das funktioniert dann allerdings nur für zwei Ebenen, bei mehr könntest du sowas wie den binären Baum der bei den Foren von phpbb3 verwendet wird benutzen, müsstest allerdings dann wohl bei jedem Post der eingefügt wird einen großen Teil der Tabelle neu berechnen.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Skippy
Mitglied
Beiträge: 212
Registriert: 19.08.2006 11:10
Wohnort: Eisenberg

Beitrag von Skippy »

@gn#36 danke für deine Anwort

Also alle Beiträge in "erster Ebene" enthalten bei parent ID ihre eigene ID (also die per autoincrement zugewiesene)
und Beiträge "zweiter Ebene" dann die ID des zugehörigen aus "erster Ebene"

gibts bei MYsql noch ne möglichkeit diese per autoincrement erzeugte ID im selben query gleich ins andere feld einzutragen?

Und dann wie sieht es mit der Performance aus ? währe diese funktion mit den 2 Ebenen bemerkbar langsamer oder macht sich das erst ab zigtausend beiträgen bemerkbar
Galvano-atelier--für alle die Galvanisieren als Hobby betreiben
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Ich denke nicht dass das merklich langsamer wäre wenn du nicht gerade tausende Beiträge abfragst, dadurch dass die Abfrage im Mysql Server läuft und nicht im PHP Skript hast du normalerweise durch die vielen Optimierungen im SQL Server eine Menge Zeit gespart gegenüber Datensortierungsaktionen die du "händisch" im Skript ausführst.

Klar kostet ein Join mehr Zeit als eine einfache Abfrage aus einer einzigen Tabelle aber ich würde nicht davon ausgehen dass das sich wirklich groß bemerkbar macht, selbst wenn nicht auf den richtigen Spalten Indizes liegen dürfte man das kaum merken wenn man nicht gerade große Mengen an Daten aus der Datenbank holt. Gegenüber zwei getrennten Abfragen die du mit einer Schleife verknüpft solltest du hier eindeutig besser liegen (alleine die ständige Neuformulierung des Queries das an die DB geschickt wird kann bei länglicheren Queries schon mal Zeit kosten, außerdem kostet die Anfrage selbst natürlich auch ein bisschen Zeit die du sparst wenn du nur eine Anfrage schicken musst).

Mir ist keine Funktion bekannt die per Auto-Increment erzeugte ID in mehrere Felder eintragen zu lassen wenn du nicht gerade so viel Zugriff auf deinen Server hast, dass du SQL Makros/Trigger anlegen kannst (und eine entsprechend neue Mysql Version verwendest mit der das geht, ich meine das gibt's erst ab Version 5)

Was du dann bräuchtest wäre sowas ähnliches wie das hier:

Code: Alles auswählen

DELIMITER //
CREATE TRIGGER triggerName
AFTER INSERT
ON tabellenname
FOR EACH ROW
BEGIN
IF NEW.parent IS NULL THEN
SET NEW.parent = NEW.ID;
END IF
END;//
Ich habe mit Triggern noch nie gearbeitet, es kann also gut sein, dass du da noch einiges dran ändern musst wenn du es benutzt, eigentlich könnte es aber grob so funktionieren. Der Trigger sollte dann die Daten vor dem Insert automatisch anpassen.

Da das aber häufig nicht zur Verfügung steht kannst du dir die ID natürlich aus der Datenbank auslesen mit der entsprechenden Funktion deiner Datenbankklasse (bei phpbb z.b. $db->sql_nextid(), als direkte mysqlfunktion mysql_insert_id) und dann die Id händisch per Update nachtragen.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „[3.0.x] Mods in Entwicklung“