2012-11-04 350 views
0

我有我的表的簡單查詢零(0)列數據返回行:Mysql的在WHERE子句

SELECT * from delivery_receipts WHERE siid=''; 

此表的唯一關鍵是drid,(無關這個問題).. 的針對性列(siid)是一個int(11)現場,非指數和非唯一...

反正我的問題是,當我運行這一點,MySQL的返回具有的所有行:

SELECT drid,siid from delivery_receipts WHERE siid='0' 

不過,當然,如果我指定了siid搜索,只有行瓦特/那siid比賽來了....

因此,似乎我的表中的所有行返回匹配具有「0」時,搜索for''

+1

不'允許null'檢查列siid或沒有檢查? –

+0

它可能只是使用0作爲默認值,因爲您試圖使用null(或char equiv)在int列上進行選擇。 – ethrbunny

回答

1

Select-Statement被服務器解釋,所以它被識別出來,需要將數據從char轉換爲int。由於int的默認值,因此您提供的空字符將被轉換爲0。

所以,如果你想獲得不帶值的所有行(NULL)你要做的

SELECT * from delivery_receipts WHERE siid IS NULL; 

編輯

SELECT * from delivery_receipts WHERE (siid = '$siid' and '$siid' <> '') OR ('$siid' = '' AND siid IS NULL); 
+0

非常感謝.. ..這解釋了爲什麼我得到這個問題..不幸的是,我不能使用「siid IS NULL」方法..長話短說,它實際上是一個即時搜索例程的PHP腳本。 .. siid ='$ siid'..有時$ siid變量不會被指定,搜索結果應該是空白的..沒關係..我知道該怎麼做才能解決這個問題,至少我知道我不能在MySQL的一邊做任何事情,因爲這是引擎的默認行爲..必須做到這一點的PHP端 – BrownChiLD

+0

@BrownChiLD你可以在PHP端做到這一點,但你也可以在MySQL端做 - 看看我的編輯; o) –

+0

ahh yes .. mySQL方面很漂亮!哈哈,但我養成了保持我的SQL儘可能簡單的習慣,我做了我能做的任何事情,我可以在PhP方面做到這一點..因爲我比在SQL更好的PHP赫赫..還卸載一些壓力的SQL發動機太... 雖然非常感謝! :)非常讚賞 無論如何只是我的2美分 – BrownChiLD