需要有关OR查询的帮助

时间:2011-06-24 20:21:51

标签: mysql perl select

当激活值为1或2时,我需要捕获特定电子邮件的password

查询我正在使用:

  $stmt = $db->prepare('select password from users where email=? && activation=? or activation=?');

    $stmt->bind_param('sii', $user, $activ, $activReset );
    $stmt->execute();

此代码会捕获所有包含activation = 2的电子邮件,但如果mail@gmail.com的值为1或2,我的想法只会捕获activation

5 个答案:

答案 0 :(得分:2)

您需要像

这样的查询
SELECT password 
FROM users 
WHERE email = 'mail@gmail.com'
   AND ( activation = 1 OR activation = 2)

所以,你应该使用像

这样的东西
$stmt = $db->prepare('select password from users where email=? AND (activation=? OR activation=?)');    

答案 1 :(得分:0)

包含条件,如果其中任一条件为真,则仍可使用针对电子邮件的第一次检查

(activation=1 or activation=2)

答案 2 :(得分:0)

$stmt = $db->prepare('select password from users where email=? AND (activation=? OR activation=?)');

使用AND关键字,并将两个可能的激活值放在封装的OR语句中。

答案 3 :(得分:0)

添加括号?

$stmt = $db->prepare('select password from users where email=? and (activation=? or activation=?)');

答案 4 :(得分:0)

查询

SELECT password 
FROM users 
WHERE email = 'mail@gmail.com'
   AND ( activation = 1 OR activation = 2)

相当于:

SELECT password 
FROM users 
WHERE email = 'mail@gmail.com'
   AND activation IN (1, 2)

所以,你也可以:

$stmt = $db->
  prepare('SELECT password FROM users WHERE email=? AND activation IN (?,?)'); 

性能没有差别,只是缩短了一点。如果您对同一个字段没有两个或多个OR条件,则可能会有所帮助。