Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

struktur mysql untuk komentar dan balasan komentar

Jika Anda ingin orang dapat membalas balasan (yaitu memiliki hierarki balasan seperti yang Anda lihat di, katakanlah, forum pesan online), maka saya akan menambahkan bidang parent_comment_id opsional ke tabel komentar.

Tabel Anda akan terlihat seperti ini

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

Kueri Anda yang menampilkan semua komentar dan balasan akan seperti:

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

Namun perhatikan bahwa dengan kueri ini, balasan Anda juga akan muncul tidak hanya di kolom 'balasan', tetapi juga di kolom 'komentar' sebagai baris tambahan yang masing-masing memiliki nol atau lebih balasan.

Untuk menampilkan nama pengguna pengguna yang membalas komentar, Anda harus bergabung dua kali ke tabel pengguna (pertama untuk pengguna yang memposting komentar asli, dan sekali lagi untuk pengguna yang menjawab). Coba kueri ini untuk menampilkan nama pengguna pengguna yang menjawab:

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 Multiple Where Clause

  2. Cara Mendapatkan Setiap Baris Ke-N di MySQL

  3. Cara Migrasi dari MSSQL ke MySQL

  4. 500 - Terjadi kesalahan – Fungsi DB melaporkan tidak ada kesalahan saat menambahkan artikel baru di Joomla

  5. PDO MySQL:Gunakan PDO::ATTR_EMULATE_PREPARES atau tidak?