所以,在我遇到这个想法之前,我认为我对MySQL非常擅长:
我有一个表用这些字段记录“投票”(恰当地命名为投票):
> id:投票的唯一ID.
> user:投票人的唯一用户ID
> item:他们投票的项目的ID
>投票:投票他们投票SET(‘上’,’下’)
现在,我正在尝试用sql方法来查找只有投票结果的用户.我知道一种方法在查询表中的大部分数据之后在PHP中以程序方式编写它,但是当只有少数查询可以找到它时,这样做真的非常非常低效.
理想情况下,我希望我的结果只是一个有0个upvotes的用户列表(因为在表中意味着他们已经投票,所以他们只是downvote)可能是他们投下的downvotes的数量.
关于如何处理这个问题的任何想法?
最佳答案
SELECT user,SUM(IF(vote='down',1,0)) AS numDownVotes
FROM votes
GROUP BY user
HAVING SUM(IF(vote='up',0))=0 -- 0 upvotes
AND SUM(IF(vote='down',0))>0 -- at least 1 downvotes
我不禁觉得有一个整洁的GROUP BY用户,投票的方式来做到这一点.