Mysql
 sql >> Baza danych >  >> RDS >> Mysql

struktura mysql dla komentarzy i odpowiedzi na komentarze

Jeśli chcesz, aby ludzie mogli odpowiadać na odpowiedzi (tj. mieli hierarchię odpowiedzi taką, jaką można zobaczyć na, powiedzmy, forum wiadomości online), dodałbym opcjonalne pole parent_comment_id do tabeli komentarzy.

Twój stół będzie wyglądał tak

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

Twoje zapytanie zawierające wszystkie komentarze i odpowiedzi wyglądałoby mniej więcej tak:

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

Pamiętaj jednak, że w przypadku tego zapytania Twoje odpowiedzi pojawią się nie tylko w kolumnie „odpowiedź”, ale także w kolumnie „komentarz” jako dodatkowe wiersze, z których każdy zawiera zero lub więcej odpowiedzi.

Aby wyświetlić nazwy użytkowników, którzy odpowiedzieli na komentarz, musisz dwukrotnie dołączyć do tabeli użytkowników (najpierw dla użytkownika, który wysłał oryginalny komentarz, a następnie dla użytkownika, który odpowiedział). Wypróbuj to zapytanie, aby wyświetlić nazwy użytkowników, którzy odpowiedzieli:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL – Napraw błąd – Błąd bazy danych WordPress Zduplikowany wpis dla klucza PRIMARY dla zapytania INSERT INTO wp_options

  2. Jak mogę używać DATE() w Doctrine 2 DQL?

  3. Jak mogę używać ON DUPLICATE KEY UPDATE w PDO z mysql?

  4. Jak mogę przekonwertować plik MDB (Access) na MySQL (lub zwykły plik SQL)?

  5. Najlepszy sposób na tworzenie/zarządzanie/projektowanie powtarzających się zadań/kalendarza