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

estructura mysql para comentarios y respuestas a comentarios

Si desea que las personas puedan responder a las respuestas (es decir, tener una jerarquía de respuestas como la que vería, por ejemplo, en un foro de mensajes en línea), agregaría un campo parent_comment_id opcional a la tabla de comentarios.

Tu mesa se vería así

`CREATE TABLE IF NOT EXISTS `comments` (
  `id` int(12) NOT NULL AUTO_INCREMENT,
  `parent_comment_id` int(12) NULL,
  `comment` text,
  `user_id` int(12) DEFAULT NULL,
  `topic_id` int(12) NOT NULL,
  `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `topic_id` (`topic_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ;`

Su consulta que muestra todos los comentarios y respuestas sería algo como:

SELECT c.id, c.comment, r.comment as reply, c.user_id, u.username, u.photo
FROM (comments c)
JOIN users u ON c.user_id = u.id
LEFT JOIN comments r ON c.id = r.parent_comment_id
WHERE c.topic_id = 9

Tenga en cuenta, sin embargo, que con esta consulta sus respuestas también se mostrarán no solo en la columna 'respuesta', sino también en la columna 'comentario' como filas adicionales, cada una con cero o más respuestas.

Para mostrar el nombre de usuario de los usuarios que respondieron a un comentario, deberá unirse dos veces a la tabla de usuarios (primero para el usuario que publicó el comentario original y nuevamente para los usuarios que respondieron). Pruebe esta consulta para mostrar los nombres de usuario de los usuarios que respondieron:

SELECT c.id, c.comment, c.user_id, u.username, u.photo, r.comment as reply, r.user_id as reply_user_id, 
u2.username as reply_username, u2.photo as reply_photo
FROM (comment c)
JOIN users u ON c.user_id = u.id
LEFT JOIN comments r ON c.id = r.parent_comment_id
JOIN users u2 ON r.user_id = u2.id
WHERE c.topic_id = 9