Anda bisa menggunakan satu tabel, yang menyertakan bidang ParentID. Jika catatan tidak memiliki nilai, itu adalah komentar, jika tidak, itu adalah balasan (baik untuk komentar atau balasan).
Anda dapat menanyakan catatan ParentID catatan (periksa itu ParentID) untuk melihat apakah balasan ini untuk komentar atau balasan.
Sunting :Di atas adalah solusi yang cukup praktis. Namun, untuk menggunakan versi yang dinormalisasi, tetap pertahankan satu tabel Komentar (tanpa ParentID), dan buat tabel ReplyTo yang memiliki CommentID, dan ResponseID, yang keduanya merupakan ID catatan di tabel Komentar.
Menggunakan ide ini, sql berikut akan menampilkan komentar dan 'balasan' untuk setiap komentar untuk setiap balasan yang memiliki komentar:
select c.comment, r.comment as reply
from comment as c, comment as r, replyto as rt
where c.ID = rt.CommentID
and r.ID = rt.ReplyID
Seperti yang Dimitrii tunjukkan, itu tidak akan menampilkan komentar tanpa balasan - untuk ini Anda memerlukan kueri gabungan luar (tidak menguji sintaks):
SELECT c.comment, r.comment as reply,
from Comment c
left outer join Comment r on c.id = r.id
left outer join replyto rt on rt.responseid = r.id