यदि आप चाहते हैं कि लोग उत्तरों का उत्तर दे सकें (अर्थात उत्तरों का एक पदानुक्रम है जैसे कि आप एक ऑनलाइन संदेश फ़ोरम में देखेंगे), तो मैं टिप्पणी तालिका में एक वैकल्पिक parent_comment_id फ़ील्ड जोड़ूंगा।
आपकी टेबल कुछ इस तरह दिखेगी
`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 ;`
सभी टिप्पणियों और उत्तरों को दर्शाने वाली आपकी क्वेरी कुछ इस प्रकार होगी:
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
ध्यान दें कि इस प्रश्न के साथ आपके उत्तर न केवल 'उत्तर' कॉलम में, बल्कि 'टिप्पणी' कॉलम में भी अतिरिक्त पंक्तियों के रूप में शून्य या अधिक उत्तरों के साथ दिखाई देंगे।
किसी टिप्पणी का उत्तर देने वाले उपयोगकर्ताओं का उपयोगकर्ता नाम दिखाने के लिए, आपको उपयोगकर्ता तालिका में दो बार शामिल होना होगा (पहले मूल टिप्पणी पोस्ट करने वाले उपयोगकर्ता के लिए, और फिर उत्तर देने वाले उपयोगकर्ता के लिए)। उत्तर देने वाले उपयोगकर्ताओं के उपयोगकर्ता नाम दिखाने के लिए इस क्वेरी का प्रयास करें:
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