Mysql
 sql >> Base de données >  >> RDS >> Mysql

Conception de la base de données pour les commentaires et les réponses

Vous pouvez simplement utiliser une table, qui inclut un champ ParentID. Si l'enregistrement n'a pas de valeur, c'est un commentaire, sinon c'est une réponse (à un commentaire ou à une réponse).

Vous pouvez interroger l'enregistrement ParentID de l'enregistrement (inspectez c'est ParentID) pour voir si cette réponse concerne un commentaire ou une réponse.

Modifier :Ce qui précède est une solution assez pratique. Cependant, pour aller avec une version normalisée, conservez toujours la seule table Comments (sans ParentID) et créez une table ReplyTo qui a un CommentID et un ResponseID, qui sont tous deux les ID des enregistrements dans la table Comments.

En utilisant cette idée, le SQL suivant affichera les commentaires et la "réponse" à chaque commentaire pour chaque réponse contenant un commentaire :

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

Comme le souligne Dimitrii, il n'affichera pas de commentaires sans réponse - pour cela, vous avez besoin d'une requête de jointure externe (n'a pas testé la syntaxe) :

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