Mysql Query忽略和where子句

时间:2014-10-17 15:06:41

标签: mysql where where-clause

我有一个简单的mysql查询,如下所示。

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的记录,而是显示它们。

有人可以帮我解决这个问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

重写以将所有的OR放在一个paranthetical语句中,并删除每个OR子句周围的超级parantheses:

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

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

还应该提到OR active like 'admin%'是超级的。它和active=1不能同时成立。