2014-10-17 162 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