2012-05-04 33 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