sql >> Base de Datos >  >> RDS >> Mysql

Diseño de base de datos para comentarios y respuestas.

Podría usar una sola tabla, que incluye un campo ParentID. Si el registro no tiene valor, es un comentario; de lo contrario, es una respuesta (a un comentario o una respuesta).

Puede consultar el registro ParentID del registro (inspeccionar es ParentID) para ver si esta respuesta es un comentario o una respuesta.

Editar :Lo anterior es una solución bastante práctica. Sin embargo, para ir con una versión normalizada, mantenga la tabla Comentarios (sin ParentID) y cree una tabla ReplyTo que tenga un CommentID y un ResponseID, los cuales son los ID de los registros en la tabla Comentarios.

Usando esta idea, el siguiente sql mostrará los comentarios y la 'respuesta' a cada comentario para cada respuesta que tenga un comentario:

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

Como señala Dimitrii, no mostrará comentarios sin respuestas; para esto, necesita una consulta de unión externa (no probó la sintaxis):

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