Mysql 即使一行为空,也可以获取数据
我使用此查询可以从Mysql 即使一行为空,也可以获取数据,mysql,sql,Mysql,Sql,我使用此查询可以从users表中获取用户,还可以从logs表中获取最新的time(时间戳),其中条目为“login\u ok”。这是为了显示用户列表以及他们上次登录的时间 SELECT u.`id`, u.`email`, u.`firstname`, u.`lastname`, u.`type`, u.`creation_date`, MAX(l.`time`) as `last_login` FROM `users` AS u JOIN `logs` AS l ON u.id = l.use
users
表中获取用户,还可以从logs
表中获取最新的time
(时间戳),其中条目为“login\u ok”。这是为了显示用户列表以及他们上次登录的时间
SELECT u.`id`, u.`email`, u.`firstname`, u.`lastname`, u.`type`, u.`creation_date`, MAX(l.`time`) as `last_login`
FROM `users` AS u
JOIN `logs` AS l ON u.id = l.user_id
WHERE l.`action` = 'login_ok'
AND `visible` = 1
GROUP BY u.`id`
ORDER BY u.`id` ASC
我这里的问题是:如果用户从未登录,则该用户的“login\u ok”条目不存在,因此查询无法获取该用户数据
即使
日志
上的l.time
不存在,是否有办法获取所有用户数据?我尝试了JOIN
name\u admin\u users\u log作为l ON(l.
time不为NULL,u.id=l.user\u id)
,但仍然没有显示没有登录日志的新用户。您可以简单地忽略login\u ok
并搜索l.action
的所有值
但是,如果您只需要具有login\u ok
和null
的值,则可以执行以下操作:
WHERE l.`action` = 'login_ok' OR l.`action` is null
使用
左连接
:
SELECT u.`id`, u.`email`, u.`firstname`, u.`lastname`, u.`type`, u.`creation_date`, MAX(l.`time`) as `last_login`
FROM `users` u LEFT JOIN
`logs` l
ON u.id = l.user_id AND l.`action` = 'login_ok'
WHERE u.`visible` = 1
GROUP BY u.`id`
ORDER BY u.`id` ASC;
这假设
可见
位于用户
中。如果它在日志中,那么该条件也应该在ON
子句中。使用左连接
而不是常规的连接
(这实际上意味着内部连接
),并将操作上的筛选器='login\u ok'
移动到该左连接
子句中
注意:从您的查询中,我们无法判断可见列来自哪个表,因此我假设它与用户相关
SELECT
u.id,
u.email,
u.firstname,
u.lastname,
u.type,
u.creation_date,
MAX(l.time) as last_login
FROM users AS u
LEFT JOIN logs AS l
ON u.id = l.user_id and l.action = 'login_ok'
WHERE u.visible = 1
GROUP BY u.id
ORDER BY u.id ASC
应该使用左/右连接而不是连接(内部)
例如:
SELECT u.id, u.name, l.time
FROM users u LEFT JOIN logs l
ON u.id=l.user_id
在这种情况下,您将从“用户”(select:users-left,logs-right中左侧的表)获取所有记录,并从右侧(“logs”)表获取所有记录,条件u.id=l.user\u id为true
最后,您将得到如下结果:
u.id u.name l.time
1 John 10.00am
2 Mary 2.15pm
3 Mark null
使用case语句,如用户登录时选择case,然后…否则,用户注销时选择case…感谢您对加入的解释!这就像一个符咒:)谢谢。欢迎@JimmyAdaro!很乐意帮忙