5

我有两张桌子: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 票,但我认为这不是一个好主意,因为它不会是一个非常优化的解决方案。

4

3 回答 3

8

这应该包括有正面投票的文章,或者包括没有投票的文章,使用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
于 2012-12-20T19:52:19.523 回答
3

select在andhaving子句中使用 ifnull 函数:

...having(ifnull(l.vote,0)) > 0...
于 2012-12-20T19:45:37.700 回答
2
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?

于 2012-12-20T19:45:47.043 回答