选择嵌套AND OR。怎么样?

时间:2013-04-08 19:07:53

标签: mysql sql comparison

下面我有一个SQL查询服务器作为登录脚本,供选择输入用户名或电子邮件的用户使用。

我注意到即使看起来它会检查其中任何一个或作为登录凭据都没有。

username1 OR username1@email.com =只是真正按用户名查找

SELECT * 
FROM tblaccount 
WHERE acc_user='username1' OR acc_email='username1@email.com' 
  AND acc_password='letmein1' AND acc_confirmed='1' AND acc_active='1'

......如果我把它改成......

username0 OR username1@email.com =它不会返回记录。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

使用OR

围绕这些条件添加一些括号
SELECT * FROM tblaccount 
WHERE (acc_user = 'username1' OR acc_email = 'username1@email.com' )
   AND acc_password  = 'letmein1' 
   AND acc_confirmed = '1' 
   AND acc_active    = '1';

答案 1 :(得分:1)

Mahmoud的解决方案是正确的。您必须在mysql中读取运算符优先级。

http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html

由于OR的优先级低于AND,因此您必须将OR置于括号中,如Mahmoud所提供的那样。