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