我有两个表,一个登录表和一个登录尝试表,用于跟踪磨损的登录尝试
登录表
| id | username | password |
| 1 | Jon | 1234 |
| 2 | Danny | ttttt |
| 7 | Martin | fffff |
尝试表
| id_attempts| time |
| 1 | 535353 |
| 2 | 554335 |
| 1 | 654545 |
| 1 | 566777 |
查询必须将用户标识为已授权,检查数据库中用户名/密码的组合,但即使用户名和密码错误,也必须返回该用户的不正确尝试次数。我已经尝试过了:
SELECT u.id,count(p.id_attempts)
FROM login as l, attempts as a
LEFT JOIN
ON l.id=a.id_attempts
WHERE username=Jon
AND pass=1234
编辑:
示例Jon尝试登录,如果用户名和密码正确,则查询必须返回jon id和3(Jon错误尝试的次数);如果jon用户名和密码错误,查询仅返回3(jon错误尝试的次数)
我建议不要使用“如果jon用户名和密码错误,则查询只能返回3(jon错误尝试的次数)”,而不是使用附加列来返回授权状态。例如
另外,由于在查询中指定了用户名,因此返回用户名或用户名没有多大意义。
SELECT l.username, count(l.id) attempts, l.password='1234' authorized
FROM login as l LEFT JOIN attempts as a
ON l.id=a.id_attempts
WHERE l.id=1
GROUP BY l.username
将返回:
username,attempts,authorized
Jon,3,1
其中1表示已授权,0表示未授权。
但是,如果您真的想满足您的原始要求,请执行以下操作:
SELECT IF( l.password = '1234' && l.id =1, l.id, "" ) id, COUNT( l.id ) attempts
FROM login AS l
LEFT JOIN attempts AS a ON l.id = a.id_attempts
WHERE l.id =1
GROUP BY l.username
对于正确的密码,它将返回:id,尝试1,3
如果没有正确的密码,它将返回:id,attempts,3
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句