MySQL:让HAVING选择也“null”

时间:2012-12-20 19:33:13

标签: mysql select group-by having

我有两个表:dilemmelike。 第一个包含文章,第二个包含投票。 该脚本随机选择一篇文章展示,用户可以投票(它是喜欢和不喜欢)。

我想查询只显示超过5票的文章,没有投票的文章等于0。

所以我尝试了这个:

SELECT d.ph1, d.ph2, d.id, SUM(l.vote) AS score
FROM dilemme d
LEFT JOIN like l
ON d.id = l.id_dilemma
WHERE d.valid = 'yup'
GROUP BY d.id HAVING SUM(l.vote) > 0

它正确显示了至少有一票并且投票总和大于0的行。这很好但是,如何选择没有投票的文章? 我尝试了很多东西并做了一些研究,但无法解决我的问题。 我认为INSERT INTO就像0票,但我不认为这是一个好主意,因为它不是一个非常优化的解决方案。

提前致谢。 PS:对不起我的英语,不是我的monthertongue;)

3 个答案:

答案 0 :(得分:7)

这应包括具有正面投票的文章,或包含使用COUNT(l.id_delemma) = 0

的无投票的文章
SELECT d.ph1, d.ph2, d.id, SUM(l.vote) AS score
FROM dilemme d
LEFT JOIN like l
ON d.id = l.id_dilemma
WHERE d.valid = 'yup'
GROUP BY d.id 
HAVING 
    SUM(l.vote) > 0
    OR COUNT(l.id_delemma) = 0

答案 1 :(得分:2)

selecthaving子句中使用ifnull函数:

...having(ifnull(l.vote,0)) > 0...

答案 2 :(得分:1)

SELECT d.ph1, d.ph2, d.id, SUM(IFNULL(l.vote, 0)) AS score
FROM dilemme d
LEFT JOIN like l
ON d.id = l.id_dilemma
WHERE d.valid = 'yup'
GROUP BY d.id
HAVING score > 0

但我不确定你对此的期望是怎样的。如果某个项目没有投票,其得分如何大于0?