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

structure mysql pour les commentaires et les réponses aux commentaires

Si vous voulez que les gens puissent répondre aux réponses (c'est-à-dire avoir une hiérarchie de réponses comme vous le verriez dans, par exemple, un forum de messages en ligne), j'ajouterais un champ parent_comment_id facultatif au tableau des commentaires.

Votre tableau ressemblerait à ceci

`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 ;`

Votre requête affichant tous les commentaires et réponses ressemblerait à :

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

Notez cependant qu'avec cette requête, vos réponses apparaîtront également non seulement dans la colonne "réponse", mais également dans la colonne "commentaire" sous forme de lignes supplémentaires, chacune avec zéro ou plusieurs réponses.

Pour afficher le nom d'utilisateur des utilisateurs qui ont répondu à un commentaire, vous devrez vous joindre deux fois à la table des utilisateurs (d'abord pour l'utilisateur qui a publié le commentaire d'origine, puis pour le ou les utilisateurs qui ont répondu). Essayez cette requête pour afficher les noms d'utilisateur des utilisateurs qui ont répondu :

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