2014-03-28 73 views
1

我想要選擇所有用戶,並獲取每個用戶從加入時間表中記錄的小時數。但是,如果用戶沒有記錄日誌,我不會在結果中返回他們的名字。我仍然想要獲取每個用戶的名稱,即使他們沒有登錄到時間表中。MySQL加入失蹤的結果

我可以得到所有用戶的結果,如果我刪除行:

AND (times.time_date BETWEEN '2014-03-01' AND '2014-03-31') 

這裏是我完整的查詢,我在做什麼錯?

SELECT users.user_id, 
users.user_name, 
SUM(times.time_used) as hours 
FROM users 
LEFT JOIN times on users.user_id = times.user_id 
WHERE users.user_reminder = 1 
AND users.status_id = 1 
AND (times.time_date BETWEEN '2014-03-01' AND '2014-03-31') 
GROUP BY users.user_id 
ORDER BY users.user_name 
+0

你有什麼存儲在數據庫,如果用戶在時間沒有登錄 – Divya

+1

感謝。我已經嘗試過了,但沒有奏效。 M哈立德Junaid有正確的答案。 – ezero

回答

2

移動你AND子句中ON()條款,使用後過濾WHERE子句將篩選出整個結果集,因此,如果任何用戶,其STATUS_ID是一個user_reminder是一個,但沒有時間的條目將被過濾掉,但如果使用並在您的條款將加入特定條件的用戶,並且將返回uesrs即使他們沒有時間條目

SELECT users.user_id, 
users.user_name, 
SUM(times.time_used) as hours 
FROM users 
LEFT JOIN times on (users.user_id = times.user_id 
AND (times.time_date BETWEEN '2014-03-01' AND '2014-03-31')) 
WHERE users.user_reminder = 1 
AND users.status_id = 1 
GROUP BY users.user_id 
ORDER BY users.user_name 
+1

這太棒了,我沒有意識到on子句可能包含一個和子句。這現在做我需要它。感謝您的解釋。 – ezero