Mysql
 sql >> Database >  >> RDS >> Mysql

Progettazione database per commenti e risposte

Potresti usare solo una tabella, che include un campo ParentID. Se il record non ha valore, è un commento, altrimenti è una risposta (a un commento oa una risposta).

Puoi interrogare il record ParentID del record (controlla è ParentID) per vedere se questa risposta riguarda un commento o una risposta.

Modifica :Quanto sopra è una soluzione abbastanza pratica. Tuttavia, per utilizzare una versione normalizzata, mantieni ancora l'unica tabella Commenti (senza ParentID) e crea una tabella ReplyTo con un CommentID e un ResponseID, entrambi ID dei record nella tabella Commenti.

Usando questa idea, il seguente sql mostrerà i commenti e la "risposta" a ciascun commento per ogni risposta che ha un commento:

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

Come sottolinea Dimitrii, non visualizzerà commenti senza risposte - per questo è necessaria una query di join esterno (non è stata testata la sintassi):

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