sql >> Database >  >> RDS >> Mysql

mysql-structuur voor opmerkingen en reacties op opmerkingen

Als je wilt dat mensen kunnen reageren op de antwoorden (d.w.z. een hiërarchie van antwoorden hebben zoals je zou zien in bijvoorbeeld een online berichtenforum), dan zou ik een optioneel veld parent_comment_id toevoegen aan de opmerkingentabel.

Je tafel zou er zo uit zien

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

Uw zoekopdracht met alle opmerkingen en antwoorden zou er ongeveer zo uitzien:

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

Houd er echter rekening mee dat bij deze zoekopdracht uw antwoorden niet alleen in de 'antwoord'-kolom, maar ook in de 'commentaar'-kolom worden weergegeven als extra rijen met elk nul of meer antwoorden.

Om de gebruikersnaam weer te geven van de gebruikers die op een opmerking hebben gereageerd, moet u twee keer deelnemen aan de gebruikerstabel (eerst voor de gebruiker die de oorspronkelijke opmerking heeft geplaatst en nogmaals voor de gebruiker(s) die heeft gereageerd). Probeer deze zoekopdracht om de gebruikersnamen te tonen van de gebruikers die hebben geantwoord:

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. Parseerfout:syntaxisfout, onverwacht '' (T_ENCAPSED_AND_WHITESPACE)

  2. gelijktijdig LEZEN en SCHRIJVEN op MySQL-tabel

  3. Tabelschema bijwerken zonder gegevens in Laravel te beïnvloeden

  4. Hoe maak je een alleen-lezen gebruiker aan in PostgreSQL?