Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Struktur für Kommentare und Kommentarantworten

Wenn Sie möchten, dass die Leute auf die Antworten antworten können (d. h. eine Hierarchie von Antworten haben, wie Sie sie beispielsweise in einem Online-Nachrichtenforum sehen würden), würde ich der Kommentartabelle ein optionales Feld parent_comment_id hinzufügen.

Ihre Tabelle würde so aussehen

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

Ihre Abfrage, die alle Kommentare und Antworten anzeigt, würde etwa so aussehen:

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

Beachten Sie jedoch, dass Ihre Antworten bei dieser Abfrage nicht nur in der Spalte „Antwort“, sondern auch in der Spalte „Kommentar“ als zusätzliche Zeilen mit jeweils null oder mehr Antworten angezeigt würden.

Um den Benutzernamen der Benutzer anzuzeigen, die auf einen Kommentar geantwortet haben, müssen Sie sich zweimal in die Benutzertabelle eintragen (zuerst für den Benutzer, der den ursprünglichen Kommentar gepostet hat, und erneut für den/die Benutzer, der geantwortet hat). Probieren Sie diese Abfrage aus, um die Benutzernamen der Benutzer anzuzeigen, die geantwortet haben:

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