从两个表中获取MySQL结果

时间:2013-12-09 18:01:12

标签: php mysql

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

我怎样才能在结果中显示其他用户?

感谢。

2 个答案:

答案 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参数。