2009-06-10 2 views
1
CREATE TABLE `comments` (
    `comment_id` int(11) NOT NULL AUTO_INCREMENT, 
    `comment_parent_id` int(11) NOT NULL DEFAULT '0', 
    `user_id` int(11) NOT NULL DEFAULT '0', 
    `comment_text` varchar(200) NOT NULL DEFAULT '', 
    `comment_created` int(20) NOT NULL DEFAULT '0', 
    `comment_updated` int(20) NOT NULL DEFAULT '0', 
    `comment_replies_count` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`comment_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 

Каждый комментарий может иметь несколько ответов, однако ответы не могут быть отвечены. Поэтому, когда кто-то отвечает на комментарий, строка, которую они вставляют, будет иметь идентификатор для комментария, на который они ответили, в столбце родительского идентификатора.MySQL SELECT с условием

Я хотел бы получить все комментарии, и если в комментарии есть ответы, я хотел бы получить последний ответ.

SELECT c1.* 
FROM comments c1 
WHERE comment_parent_id = '0' 
ORDER BY comment_created DESC; 

So if c1.comment_replies_count > 0 I would like to... 

SELECT c2.* 
FROM comments c2 
WHERE comment_parent_id = c1.comment_id 
ORDER BY comment_created DESC Limit 1; 

Возможно ли это в 1 запросе? Или Лучше всего сделать другой вызов в базе данных во время инструкции php loop для получения последнего ответа на комментарий?

Заранее благодарим вас и прошу простить мое невежество, пока я все еще учусь.

ответ

0

Попробуйте суб-выбор:

SELECT * FROM comments WHERE comment_parent_id in (
SELECT c1.comment_id 
FROM comments c1 
WHERE c1.comment_parent_id = '0' 
AND c1.comment_replies_count > 0 
ORDER BY comment_created DESC) 
ORDER BY comment_created DESC Limit 1; 
2

Вы можете присоединиться к таблице обратно на себя:

SELECT c1.*, c2.*, MAX(c2.comment_id) 
FROM comments c1 LEFT JOIN comments c2 ON c1.comment_id = c2.comment_parent_id 
WHERE c1.comment_parent_id = '0' 
GROUP BY c1.comment_id 
ORDER BY c1.comment_created DESC 
+0

Dang, бил меня к нему. –

+0

Этот вид работает, но он не возвращает последний ответ - всегда первый. например: комментария (ID 1, родитель ID 0, текст "Hello") первый ответ (ID 2, родитель ID 1, текст "Ответить на комментарий 1") второго ответа (ID 3, родительский ID 1, текст «Еще один ответ на комментарий 1») Несмотря на то, что MAX возвращает 3, он возвращает идентификатор и текст из первого ответа. – Seth

+0

Попробуйте добавить предложение в предложение WHERE, чтобы сравнить MAX() с c2.comment_id. – acrosman

Смежные вопросы