2014-03-28 36 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