我的查询需要执行此操作
- 获取用户详细信息
- 从记录的登录表中获取上次登录
- 获取失败登录的次数,但仅来自该用户最近 3 次登录
我的问题似乎出在子查询中。我希望其中的 WHERE
部分引用先前在外部查询中匹配的 user_id 。这可能吗?我是否把这个查询弄得一团糟?
$query = 'SELECT users.id,
users.email,
users.password,
users.first_name,
users.last_name,
max(user_logins.datetime) as last_login,
count(user_logins.failed) as failed_logins,
FROM users, user_logins
WHERE users.email = ' . Database::instance()->escape($email) . '
AND users.id = user_logins.user_id
AND user_logins.datetime IN (SELECT datetime FROM user_logins WHERE user_id = users.id )
LIMIT 1';
last_login
似乎运行良好。我想要最后3个的原因是这样我可以检查最后3个是否失败,然后为该用户登录设置一个超时。
我无法返回并执行UPDATE users SET failed = 1 WHERE failed = 0
,因为那样我将无法获得准确的用户登录日志。我希望看到任何失败的案例。
我做错了什么? 谢谢
最佳答案
我会尝试以下操作。它应该在子查询中为您提供最近的 3 次登录,SUM
计算失败登录的次数并获取上次登录的时间。
MySQL
允许不列出在 GROUP BY
中选择的每一列,对于其他数据库,您必须添加所有 users
列您需要GROUP BY
。
$query = '
SELECT u.id,
u.email,
u.password,
u.first_name,
u.last_name,
MAX( ul.datetime ) as last_login,
SUM( ul.failed ) as failed_logins,
FROM users u
JOIN ( SELECT user_id, datetime, failed
FROM user_logins
ORDER BY datetime DESC
LIMIT 3 ) ul
ON ( u.id = ul.user_id )
WHERE u.email = ' . Database::instance()->escape($email) . '
GROUP BY u.id
';
关于mysql - 需要 MySQL 查询帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2346680/