Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Datenbankdesign für Kommentare und Antworten

Sie könnten nur eine Tabelle verwenden, die ein ParentID-Feld enthält. Wenn der Datensatz keinen Wert hat, ist es ein Kommentar, andernfalls ist es eine Antwort (entweder auf einen Kommentar oder eine Antwort).

Sie könnten den ParentID-Datensatz des Datensatzes abfragen (prüfen Sie es ist ParentID), um zu sehen, ob es sich bei dieser Antwort um einen Kommentar oder eine Antwort handelt.

Bearbeiten :Das obige ist eine ziemlich praktische Lösung. Um jedoch mit einer normalisierten Version fortzufahren, behalten Sie immer noch die eine Kommentartabelle (ohne ParentID) und erstellen Sie eine ReplyTo-Tabelle mit einer CommentID und einer ResponseID, die beide die IDs der Datensätze in der Kommentartabelle sind.

Unter Verwendung dieser Idee zeigt die folgende SQL die Kommentare und die 'Antwort' auf jeden Kommentar für jede Antwort, die einen Kommentar enthält:

select c.comment, r.comment as reply
from comment as c, comment as r, replyto as rt
where c.ID = rt.CommentID
and r.ID = rt.ReplyID

Wie Dimitrii betont, werden keine Kommentare ohne Antworten angezeigt - dafür benötigen Sie eine äußere Join-Abfrage (syntax wurde nicht getestet):

SELECT c.comment, r.comment as reply,
from Comment c 
  left outer join Comment r on c.id = r.id  
  left outer join replyto rt on rt.responseid = r.id