2013-03-19 58 views
1

這是我的代碼:的MySQL不等於不工作

$query = mysql_query("SELECT P_Id, Thing,Something Date 
    FROM priv 
    WHERE Something = '$thing' AND thing2 <> 'This' 
    LIMIT 1" 
) or die(mysql_error()); 

代碼工作正常,無"thing2 <> 'this'"聲明,但是當我實現"thing2 <> 'this'",則返回0的結果。就好像表中沒有空行一樣,但表的thing2行中有空行(NULL)。

問題是,這個「不等於」語句不起作用,我試過了所有的東西,但它不會返回任何值。

編輯(解釋說明): 列看起來像這樣 - P_Id |東西|日期| Thing1 |事情2,我需要從某一行接收P_Id,其中Something = Something和Thing1不EQLAS爲'this'(上例),而Thing2也不等於'this'。我知道這聽起來很瘋狂.Sorry

好的,所以我嘗試了一些實驗,並且它表示thingy不是在處理things1/thing2列,而是其他列如「Something」表,其中也有'this'條目可以正常工作(找到最靠近的行是不是'這個'條目)。但爲什麼這不是與東西1和2 ???我已嘗試重命名列的東西,但沒有結果。

+1

你能包括一些樣本數據和預期輸出? – 2013-03-19 14:18:38

+0

對不起。但查詢告訴它所有(這是樣品) – user2107321 2013-03-19 14:28:51

+0

@ user2107321:不,問題不**包含所有信息。您*可以*生成一個小樣本表,告訴我們內容並向我們展示測試查詢的結果。這就是所謂的[SSCCE](http://sscce.org)(一定要關注並閱讀該鏈接!),這是一個*非常好的主意*既可以自己發現問題*也可以*能夠傳達問題簡潔。 – 2013-03-19 14:30:14

回答

5

something <> NULL will evaluate to NULL。如果用於與0(或false)幾乎相同的查詢中。

請記住,SQL使用three-valued logic而不是簡單的二進制邏輯。

您可能需要檢查NULL明確使用IS NULL

... OR THING IS NULL 

Alernatively可以使用NULL-safe equals operator <=>與否定(這是MySQL的具體,但是,it's not standard SQL):

... AND NOT (THING <=> 'This') 
+0

+1我認爲三種重要的邏輯就是這裏的答案。 – Kermit 2013-03-19 14:21:57

+0

要解決此問題,可以使用「[null-safe](http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_equal-to)」equals('<=>' )和'NOT'運算符(因爲沒有「null-safe不等於」)。 'WHERE NOT(thing2 <=>'this')' – 2013-03-19 14:22:08

+0

@RocketHazmat:有趣的是,我不知道MySQL有這樣一個操作符。介意我是否將它添加到我的答案中? – 2013-03-19 14:24:39