我有一个简单的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的记录,而是显示它们。
有人可以帮我解决这个问题吗?
提前致谢。
答案 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条件。如果其中任何一个是TRUE
和active = 1
,那么它将返回记录。
还应该提到OR active like 'admin%'
是超级的。它和active=1
不能同时成立。