2013-12-09 5 views
3

У меня есть две таблицы, users и logins (временные метки на колонке login_time)Получить результаты MySQL из двух таблиц

Я пытаюсь заглянуть в таблице пользователей, чтобы найти пользователей, которые не вошли в более чем 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' 
    ") 

Если удалить ГДЕ timestampdiff я могу увидеть их все, конечно, но с указанием NULL значение в столбце login_time.

Как я могу показать и других пользователей в результате?

Спасибо.

+0

Вы можете установить отметку времени по умолчанию для -infinity, если пользователь еще не вошёл в систему –

+0

Добавьте 'ИЛИ h.user_id IS NULL' в предложение WHERE ... –

ответ

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 
+0

Спасибо, я попробовал это, и я вижу, что он работает сейчас :) – AJ152

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() вернет первый непустой аргумент.

+0

, вероятно, нужно использовать 51 вместо 50 в coalesce –

+0

@DavidFleeman True! Извините за опечатку (предназначенная для написания 60) ... исправление – Barranka

+0

Спасибо всем за помощь! – AJ152

Смежные вопросы