Unterkommentare für Kommentare?

Naquadah

Benutzer
Beiträge
10
Ich würde es gerne so machen, das meine Kommentare Unterkommentare haben können. Ich erstelle grade einen kompletten Blog, um meine Fähigkeiten in Sachen MySQL und auch in der Programmierung zu verbessern.

"Normale" Kommentare sind jetzt schon für die Blog Einträge mögich aber wie kriege ich es hin, das ein Kommentar auch so Unterkommentare haben kann, also auch mehrere?
Derzeit sieht meine Tabelle für ein Kommentar so aus:

Kommentar.png

Die Ansicht reicht ja oder? Ich habe das jetzt mal aus phpmyadmin kopiert.

Brauche ich dann dafür noch eine extra Tabelle "Unterkommentar", die dann durch eine Referenz in dem Kommentar dem Unterkomemntar zugeordnet wird? Man brauch ja dann auch eigentlich keine Referenz auf die Tabelle für den Eintrag oder? Man kann die dann ja durch die Referenz dann zuordnen?
 
Werbung:
Wie wäre es mit einem rekursivem Verweis ?
Das Unterkommentar ist einfach nur ein Kommentar in deiner Tabelle, verweist allerdings auf eine ID des übergeordneten Kommentars?

Natürlich müsste man wissen wie dein restliches Design soweit aussieht (vorallem worauf die Spalte entry_id verweist) aber grundsätzlich möglich...
 
Wie macht man das denn mit einem rekursivem Verweis? Ich wusste gar nicht, dass das auch in MySQL geht. Allerdings müsste ich dann ja auch noch die Struktur des Kommentars um ein Feld erweitern, sonst würde das ja nicht funktionieren, nicht wahr?

Wieso muss man dafür jetzt unbedingt die Struktur des Eintrages kennen? Ich kann ja hier gerne mal die Tabelle zeigen.:
Eintrag.png
 
Zuletzt bearbeitet:
vereinfacht so:

Code:
test=# create table kommentare (id serial primary key, parent_id int references kommentare, content text);
CREATE TABLE

Zum Abfragen nutzt man dann rekursive Abfragen. Allerdings kann MySQL das, wie so vieles, nicht.
 
Wenn du nur zwei Kommentar-Ebenen hast würde ich dir zu einer eigenen Tabelle für Unterkommentare raten. Ansonsten zu einer anderen Datenbank.
 
@akretschmer
Ist das da oben auch MySQL Syntax? Das mit =# habe ich noch nie gesehen oder wofür soll das stehen? Wenn das dann aber eh nicht mit MySQL abgefragt werden kann, dann macht das doch auch keinen Sinn oder nicht? Mir fällt da aber auch keine Möglichkeit ein, wie man das mit einer SQL Abfrage vergleichen kann. Joins kann man ja auch nicht verwenden und mit einer einfachen WHERE Abfrage geht das ja auch nicht?

Wenn ich nur ein Unterkommentar erlauben wollen würde, dann würde ich das ja auch warscheinlich mit einer extra Tabelle machen aber ich würde ja gerne mehrere erlauben und nicht nur eines. Geht das denn dann mit MySQL überhaupt?
 
Kurz und Knapp? Nein...

Zumindest nicht mit reiner Datenbankfunktionalität... Man kann sich natürlich was mit PHP oderso zusammen frickeln...
 
Werbung:
Ach ja, um rekursive Abfragen (mit PostgreSQL) mal wenigstens kurz gezeigt zu haben:

Code:
test=*# select * from kommentare ;
 id | parent |  content
----+--------+--------------------------
  1 |  | erster haupt
  2 |  1 | erster unter
  3 |  2 | erster unter unter
  4 |  3 | erster unter unter unter
  5 |  | zweiter
(5 rows)

Time: 0,167 ms
test=*# with recursive r as (
  select *,
  0::int as level
  from kommentare
  where parent is null

  union all

  select  kommentare.*,
  r.level+1
  from kommentare
  inner join r on kommentare.parent=r.id
)

select  id,
  parent,
  repeat('-',level) || '> ' || content
from r
order by id, parent;
 id | parent |  ?column?
----+--------+-------------------------------
  1 |  | > erster haupt
  2 |  1 | -> erster unter
  3 |  2 | --> erster unter unter
  4 |  3 | ---> erster unter unter unter
  5 |  | > zweiter
(5 rows)
 
Zurück
Oben