我有两个表,users
和logins
(login_time列上的时间戳)
我正在尝试在users表中查找未登录超过50分钟的用户。
有些用户从未登录过,这意味着他们目前还没有登录表中的条目,但我需要能够在查询结果中找到它们,因为它们还没有登录。
这就是我所拥有的,但到目前为止,我只能在“登录”表中看到具有登录条目的用户超过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 timestampdiff,我当然可以看到它们,但在login_time列中显示NULL值。
我怎样才能在结果中显示其他用户?
感谢。
答案 0 :(得分:4)
要让从未登录过的用户添加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
答案 1 :(得分:0)
两种可能的解决方案:
第一个:在查询中添加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参数。