带count()联接的SQL查询以及在表上的位置

阿尔贝托·阿里巴巴(Alberto Alibaba)

我有两个表,一个登录表和一个登录尝试表,用于跟踪磨损的登录尝试

登录表

|   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错误尝试的次数)

乔治·O。

我建议不要使用“如果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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章