2013-03-19 67 views
0

不知道我的逻辑在这一个正常工作。我有一个表Documents,它具有每个项目的唯一ID和文档的名称。然后,我有另一个表DocVotes存储在文档上(每个记录一个表决)用户投票有一个字段Vote它是(YES为1和0否)BOOLMySQL连接查询COUNT意外的结果

我想检查是否有特定的用户MemberID对文档之前投票,显然你不能对自己的文件进行表决

这里(排除AuthorID选中)我想

查询
SELECT d.ID, d.Name, COUNT(dv.MemberID) 
FROM Documents AS d 
LEFT JOIN DocVotes AS dv ON dv.ItemID=d.ID 
    AND dv.MemberID=32 
WHERE d.Status = 'Proposed' 
    AND d.AuthorID<>32 

我觉得它应该做的:获取IDName和计数由MemberID(32在这种情况下)投票的数目,然后简单地检查计数,如果计数为0,那么这将意味着,用户还没有投票,如果1吨他们有(你只能投一次)。

但是我找回,但只有1票投了这个用户的这个特定文档上的6计数。所以,很显然,这是计算更多的只是该条目......(我只得到1排回)

的思考?

+4

您可能需要1)小提琴,所以我们可以检查2)'集团BY' – fedorqui 2013-03-19 05:13:05

+0

我其实只是试过了,我得到了6行并获得了预期的结果。我遗漏了'GROUP BY d.ID',现在效果很好。总是很明显,让我们......谢谢。 – SnareChops 2013-03-19 05:16:06

+0

好!我把它放在答案中,以便可以将问题标记为已回答。 – fedorqui 2013-03-19 05:18:13

回答

1

只是要注意什么已经讲过的评论:

尝试使用GROUP BY d.ID

SELECT d.ID, d.Name, COUNT(dv.MemberID) 
FROM Documents AS d 
LEFT JOIN DocVotes AS dv ON dv.ItemID=d.ID 
    AND dv.MemberID=32 
WHERE d.Status = 'Proposed' 
    AND d.AuthorID<>32 
GROUP BY 
    d.ID