2012-02-07 130 views
0

我有一個非常瘋狂的查詢,我知道,但是當我運行它時,它會返回所有匹配,無論是否爲空的mvideo是否爲空。Mysql查詢忽略NULL和空字段

查詢是:

SELECT * 
FROM `weaponsprojects` 
WHERE mvideo != "" 
    AND credit7 = "' .$person. '" 
    OR credit2 = "' .$person. '" 
    OR credit3 = "' .$person. '" 
    OR credit4 = "' .$person. '" 
    OR credit5 = "' .$person. '" 
    OR credit6 = "' .$person. '" 
    OR credit1 = "' .$person. '" 
    OR credit8 = "' .$person. '" 
    OR credit9 = "' .$person. '" 
    OR credit10 = "' .$person. '" 
    OR credit11 = "' .$person. '" 
    OR credit12 = "' .$person. '" 
    ORDER BY usort' 

,並返回當任何學分等於人,但它完全忽略了mvideo部分。爲什麼是這樣??

編輯:字段不爲空,只是單純的空沒有空格只是空白

回答

4

我認爲WHERE條件在邏輯上是有缺陷的......你在這裏需要一些優先級,例如:

SELECT * 
FROM `weaponsprojects` 
WHERE mvideo != "" 
    AND (credit7 = "' .$person. '" 
    OR credit2 = "' .$person. '" 
    OR credit3 = "' .$person. '" 
    OR credit4 = "' .$person. '" 
    OR credit5 = "' .$person. '" 
    OR credit6 = "' .$person. '" 
    OR credit1 = "' .$person. '" 
    OR credit8 = "' .$person. '" 
    OR credit9 = "' .$person. '" 
    OR credit10 = "' .$person. '" 
    OR credit11 = "' .$person. '" 
    OR credit12 = "' .$person. '") 
    ORDER BY usort' 

通過添加()我們告訴WHERE聲明:「無論是mvideo是不是空的,它匹配OR語句之一」

+1

是的,請參閱http ://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html – VolkerK 2012-02-07 22:36:30

+0

Brillant它的工作原理,我不知道我能做到這一點,儘管總理 – 2012-02-07 22:44:53