2009-09-08 2 views
0

Вот мой запрос до сих пор:Как добавить дополнительное условие к этому запросу (используя CASE)?

SELECT
posts.title
, SUM(CASE comments.status WHEN 'approved' THEN 1 END) AS commentsCount
FROM posts
INNER JOIN comments
ON comments.postID = posts.id
WHERE
posts.status = ?
GROUP BY
posts.title
ORDER BY
commentsCount DESC
LIMIT 5

мне нужно, чтобы он также проверить, что comment.flagged = 0, когда он получает commentsCount. Я попытался добавить дополнительные CASE с в вызове SUM(), но это привело к фатальной ошибке. Как я могу это достичь?

Спасибо!

ответ

1

Похоже, что вы на самом деле пытается сделать это:

SELECT 
posts.title 
, COUNT(*) AS commentsCount 
FROM posts 
INNER JOIN comments 
ON comments.postID = posts.id 
AND comments.status = 'approved' 
AND comments.flagged = 0 
WHERE 
posts.status = ? 
GROUP BY 
posts.title 
ORDER BY 
commentsCount DESC 
LIMIT 5 

Поскольку вы заинтересованы только в comments которого status является 'approved', условие должно быть в состоянии присоединиться.

Edit: Я обновил запрос если вы хотите считать комментарии, чьи status является 'approved' и flagged равно 0.

+0

Мне нужно получить одобренные комментарии и столбцы с пометкой = 0. Я попробовал ваш SQL и получил это сообщение об ошибке: «У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, используемого рядом с 'WHEN' approved 'WHERE posts.status =? GROUP BY posts.title ORDER ' –

+0

Не могли бы вы объяснить, что вы на самом деле пытаетесь достичь в своем вопросе, пожалуйста? На простом английском языке. Например, «Я пытаюсь получить 5 сообщений с наибольшим количеством комментариев, статус которых« одобрен », кроме как с отмеченной частью. –

+0

За исключением COUNT (*), этот код работает нормально. Спасибо за помощь! –

1
SELECT 
posts.title 
, SUM(IF ((comments.status='approved' AND comments.flagged = 0),1,0)) AS commentsCount 
FROM posts 
INNER JOIN comments 
ON comments.postID = posts.id 
WHERE 
posts.status = ? 
GROUP BY 
posts.title 
ORDER BY 
commentsCount DESC 
LIMIT 5 
+0

Этот код дает мне эту ошибку: «У вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования вблизи '), 1,0) AS commentsCount FROM posts INNER JOIN comments ON comments.postID = p' –

+0

@Arms, я отредактировал инструкцию IF скользящих скобок. – dnagirl

+0

Это работает сейчас, спасибо :) Мне любопытно, если ваш метод более или менее эффективен, чем мой собственный ответ, который я опубликовал. –

0

Основе с Джоша Дэвиса SQL, вот что работает для меня:

SELECT
posts.title
, posts.slug
, COUNT(comments.id) AS commentsCount
FROM posts
INNER JOIN comments
ON comments.postID = posts.id
AND comments.status = 'approved'
AND comments.flagged = 0
WHERE
posts.status = ?
GROUP BY
posts.title
ORDER BY
commentsCount DESC
LIMIT 5

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