2016-05-26 12 views
1

In meinem vorherigen Projekt, das ich Beiträge und Kommentare als zwei Tabellen hatte:Datenbank-Schema-Design für Beiträge, Kommentare und Antworten

Post

  • id
  • Text
  • Zeitstempel
  • userid

Kommentar

  • id
  • Nachricht
  • Zeitstempel
  • userid
  • postid

Jetzt habe ich Antworten auf Kommentare zu entwerfen. Die Antworten sind nur eine Ebene, sodass Benutzer nur auf Kommentare und nicht auf Antworten antworten können. Die Baumstruktur ist nur 1 Level tief. Meine erste Idee war, die gleiche Kommentartabelle für Kommentare und Antworten zu verwenden. Ich habe eine neue Spalte aber:

Kommentar

  • id
  • Nachricht
  • Zeitstempel
  • userid
  • postid
  • parentcommentid

Antworten h ave parentcommentid wird auf den übergeordneten Kommentar gesetzt, zu dem sie gehören. Übergeordnetes Kommentare haben es nicht (null)

Abrufen Kommentare für einen bestimmten Beitrag ist einfach:

aber dieses Mal habe ich eine andere Abfrage benötigen, um die Kommentar Antworten zu erfahren. Dies muss für jeden Kommentar gemacht werden:

Dies scheint keine gute Lösung zu sein, gibt es eine Möglichkeit, eine einzige Abfrage zu haben, die die vollständige Liste der Kommentare/Antworten in der richtigen Reihenfolge zurückgibt? (Diktiert durch die Zeitstempel und die Verschachtelung)

+0

Das ist in Ordnung. Der andere Weg ist auch in Ordnung. – Strawberry

+0

Sie meinen, ist kein Flaschenhals, um eine Abfrage für jeden Kommentar zu machen? –

+0

Nun, es ist keine separate Abfrage - nur ein Join. – Strawberry

Antwort

2

Sie verbinden verwenden können und das Ergebnis in einzelner Abfrage zu erreichen, wie ich unten angegeben:

SELECT *, cc.message as replied_message 
    FROM `post` 
    JOIN comment as c 
     ON c.postid = post.id 
    JOIN comment as cc 
     ON cc.id = c.parentcommentid 
ORDER BY c.timestamp DESC, cc.timestamp DESC; 

Bitte zur Kenntnis, dass es funktioniert nur richtig, wenn 1 Kommentar 1 Antwort nur .Mehrere Antworten auf einzelnen Kommentar werden von dieser Abfrage nicht unterstützt

+0

Dies ist die Abfrage, die ich dachte .. aber Kommentare sollten nach Timestamp sortiert werden und Antworten innerhalb der Kommentare sollten ebenfalls sortiert werden. Oh, nur 1 Antwort? Leider kann ein Kommentar in meinem Szenario eine Reihe von Antworten haben. –

+0

Dann wäre es nicht möglich in einer einzigen Abfrage und wenn wir es immer noch über Join versuchen, dann gibt es möglicherweise doppelte Zeilen, weil jedes Mal, wenn Sie kommentierte Daten kommentiert werden aber diese alle liefern Ergebnis mit der ursprünglichen Nachricht. Entscheiden Sie zuerst, welche Richtung Sie verschieben möchten 1) einzelne Abfrage mit Datensatzduplizierung 2) 2 separate Abfragen, 1. für Nachricht und 2. für Antworten – Rupal

+0

das ist meine eigentliche Frage: kann es mit 1 getan werden Frage oder nicht? Mit 1 Abfrage ist es möglich, die Baumstruktur zu rekonstruieren oder nicht? –

Verwandte Themen