从两个表中获取MySQL结果


Get MySQL results from two tables

我有两个表,userslogins(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参数。