2012-02-07 251 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