2012-05-04 35 views
0

我有2个表,投票人和用户。我想向所有用户显示其用户信息旁边的总分配选举人记录。mySQL JOIN查询为0分配记录的用户

此时,此查询类型的作品 - 它显示分配了任意数量记录的用户的总数,但它不显示在投票人表中有0个记录分配的用户。

选民记录被分配给字段voter.owner的用户。这是我目前有:

SELECT u.id 
    ,u.admin 
    ,u.active 
    ,u.name 
    ,u.email 
    ,u.last 
    ,if(count(v.owner) is NULL,'0',count(v.owner)) as assigned 
from user u 
left join voter v 
    on u.id = v.owner 
where u.cid = '$cid' 
order by u.id asc 

上如何显示所有用户,甚至不拥有者和选民记录的任何建议吗?

+0

你应该小心与MySQL保留字作为表名(如user),或者正确地转义它们。请参阅http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html –

+1

我们是否可以从两个表中看到一些示例数据?对我来说,这看起来像一个正确的左连接(保留来自用户的行,即使在选民中没有匹配)。你可以试试'GROUP'你的结果 –

回答

-2

左连接是这个问题的错误方法。 的解决方案是使用一个子选择像这样:

SELECT `user.id`, `user.admin`, `user.active`, `user.name`, `user.email`, `user.last`, 
    (SELECT COUNT(*) FROM voter WHERE `user.id` = voter.owner) 
FROM `user` 
WHERE user.cid = '$cid' 
ORDER BY `user.id` ASC 
+0

谢谢!这很好 - 现在我意识到子查询是解决这个问题的方法。 –

+1

左边加入这里没什么问题。 OTOH mysql不能很好地处理子查询中的推断谓词。 – symcbean

1
if(count(v.owner) is NULL,'0',count(v.owner)) as assigned 

应该是...

SUM(if(v.owner is NULL,0,1) as assigned