我有两个表,users
和logins
(login_time列上的时间戳)
我试图在用户表中查找登录时间未超过50分钟的用户。
有些用户从未登录过,这意味着他们在登录表中还没有条目,但我也需要能够在查询结果中找到他们,因为他们还没有登录。
这就是我所拥有的,但到目前为止,我只能在"logins"表中看到登录条目的用户,持续时间超过50分钟,但任何其他从未登录的用户都不会出现。
mysql_query("
SELECT *
FROM users l
LEFT JOIN logins h
ON l.id = h.user_id
WHERE abs(timestampdiff(MINUTE,now(), h.`login_time`)) >'50'
")
如果我删除WHERE时间戳diff,我当然可以看到它们,但在login_time列中显示NULL值。
我如何也在结果中显示其他用户?
谢谢。
要获得从未登录过的用户,只需添加OR h.user_id IS NULL
SELECT *
FROM users l
LEFT JOIN logins h
ON l.id = h.user_id
WHERE abs(timestampdiff(MINUTE,now(), h.`login_time`)) >'50'
OR h.user_id IS NULL
两种可能的解决方案:
第一个:在查询中添加is null
条件:
SELECT *
FROM
users l
LEFT JOIN
logins h ON l.id = h.user_id
WHERE
abs(timestampdiff(MINUTE,now(), h.`login_time`)) >'50'
OR h.login_time is null;
第二个:使用coalesce
功能:
SELECT *
FROM
users l
LEFT JOIN
logins h ON l.id = h.user_id
WHERE
coalesce(abs(timestampdiff(MINUTE,now(), h.`login_time`)), 60) >'50'
coalesce()
将返回第一个非null参数。