2014-10-17 159 views
0

我有一个简单的mysql查询,如下所示。Mysql查询忽略和where子句

SELECT `om_user`.`id` , `om_user`.`username` , `om_user`.`firstName` , `om_user`.`lastName` , `om_user`.`role` , `om_user`.`email` , `om_user`.`status` 
FROM `om_user` 
WHERE (
id LIKE 'admin%' 
) 
OR (
username LIKE 'admin%' 
) 
OR (

PASSWORD LIKE 'admin%' 
) 
OR (
salt LIKE 'admin%' 
) 
OR (
role LIKE 'admin%' 
) 
OR (
firstName LIKE 'admin%' 
) 
OR (
lastName LIKE 'admin%' 
) 
OR (
addressLine1 LIKE 'admin%' 
) 
OR (
addressLine2 LIKE 'admin%' 
) 
OR (
addressLine3 LIKE 'admin%' 
) 
OR (
city LIKE 'admin%' 
) 
OR (
county LIKE 'admin%' 
) 
OR (
postcode LIKE 'admin%' 
) 
OR (
country LIKE 'admin%' 
) 
OR (
email LIKE 'admin%' 
) 
OR (
contactNo LIKE 'admin%' 
) 
OR (
avatar LIKE 'admin%' 
) 
OR (

STATUS LIKE 'admin%' 
) 
OR (
passwordRequestStatus LIKE 'admin%' 
) 
OR (
passwordResetCount LIKE 'admin%' 
) 
OR (
passwordResetSalt LIKE 'admin%' 
) 
OR (
passwordResetTime LIKE 'admin%' 
) 
OR (
createdOn LIKE 'admin%' 
) 
OR (
createdBy LIKE 'admin%' 
) 
OR (
lastUpdateOn LIKE 'admin%' 
) 
OR (
lastUpdateBy LIKE 'admin%' 
) 
OR (
active LIKE 'admin%' 
) 
AND (
active =1 
) 
ORDER BY `id` DESC 
LIMIT 0 , 30 

但由于某种原因,它忽略了active=1条件。而不是忽略active列中值为0的记录,它仍会显示它们。

任何人都可以帮助我吗?

在此先感谢。

+2

我认为你需要在所有“OR”子句中加括号。选择... from ... where((a = 1)or(b = 1))and active = 1 – 2014-10-17 15:09:35

+0

不完全确定,但是您是否需要将1更改为True? – sjramsay 2014-10-17 15:11:09

回答

1

重写,把所有的OR的在一个单一的paranthetical声明,并删除周围的每一个OR子句superflous括号:

SELECT 
    `om_user`.`id`, 
    `om_user`.`username`, 
    `om_user`.`firstName`, 
    `om_user`.`lastName`, 
    `om_user`.`role`, 
    `om_user`.`email`, 
    `om_user`.`status` 
FROM `om_user` 
WHERE 
    (
     id LIKE 'admin%' 
     OR username LIKE 'admin%' 
     OR PASSWORD LIKE 'admin%' 
     OR salt LIKE 'admin%' 
     OR ROLE LIKE 'admin%' 
     OR firstName LIKE 'admin%' 
     OR lastName LIKE 'admin%' 
     OR addressLine1 LIKE 'admin%' 
     OR addressLine2 LIKE 'admin%' 
     OR addressLine3 LIKE 'admin%' 
     OR city LIKE 'admin%' 
     OR county LIKE 'admin%' 
     OR postcode LIKE 'admin%' 
     OR country LIKE 'admin%' 
     OR email LIKE 'admin%' 
     OR contactNo LIKE 'admin%' 
     OR avatar LIKE 'admin%' 
     OR STATUS LIKE 'admin%' 
     OR passwordRequestStatus LIKE 'admin%' 
     OR passwordResetCount LIKE 'admin%' 
     OR passwordResetSalt LIKE 'admin%' 
     OR passwordResetTime LIKE 'admin%' 
     OR createdOn LIKE 'admin%' 
     OR createdBy LIKE 'admin%' 
     OR lastUpdateOn LIKE 'admin%' 
     OR lastUpdateBy LIKE 'admin%' 
     OR active LIKE 'admin%' 
    ) 
    AND active = 1 
ORDER BY 
    `id` DESC LIMIT 0, 
    30 

这将测试所有的或条件。如果其中任何一个是TRUEactive = 1那么它将返回记录。

另外应该提到OR active like 'admin%'是superflous。它和active=1不能同时成立。

+0

谢谢。有效。 – 2014-10-17 15:17:10