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

mysql-struktur til kommentarer og kommentarsvar

Hvis du ønsker, at folk skal være i stand til at svare på svarene (dvs. have et hierarki af svar, som du vil se i f.eks. et online meddelelsesforum), så vil jeg tilføje et valgfrit parent_comment_id-felt til kommentartabellen.

Dit bord ville se sådan ud

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

Din forespørgsel, der viser alle kommentarer og svar, ville være noget i retning af:

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

Bemærk dog, at med denne forespørgsel vil dine svar også vises ikke kun i "svar"-kolonnen, men også i "kommentar"-kolonnen som yderligere rækker, hver med nul eller flere svar.

For at vise brugernavnet på de brugere, der har svaret på en kommentar, skal du deltage to gange i brugertabellen (først for den bruger, der har sendt den oprindelige kommentar, og igen for den eller de brugere, der har svaret). Prøv denne forespørgsel for at vise brugernavnene på de brugere, der har svaret:

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


  1. T-SQL Stuff Kommando

  2. Genererer sql-indsæt til Oracle

  3. Hvordan kontrollerer man, om der findes en begrænsning i SQL-serveren?

  4. Oracle-indstilling pr. brugers standardskema (ændrer ikke en session)