2012-09-18 35 views
2

基本上,我0或0返回1 - 這不是真的是我想要的:)我真的不知道爲什麼,因爲如果我選擇0或0我得到0 ..false或false = true在MySQL中?很奇怪的行爲

我認爲這可能是因爲is_premium_dealer是一個枚舉('0','1')而不是一個布爾(不問我爲什麼,我沒有設計這個數據庫!)

有沒有人知道這是因爲ENUM ,如果是這樣,我怎麼把它轉換成一個整數?

在此先感謝! 約翰。

SELECT is_premium_dealer, company_name, 
(SELECT COUNT(*) FROM adverts WHERE user_id = users.id AND is_archived = 0) AS innerquery, 
((SELECT COUNT(*) FROM adverts WHERE user_id = users.id AND is_archived = 0 AND is_deleted = 0) > 0 OR is_premium_dealer = 1) AS logicissue 
FROM `user_profiles_dealers` 
LEFT JOIN `users` ON user_profiles_dealers.user_id = users.id 
LEFT JOIN `counties` ON user_profiles_dealers.county_id = counties.id 
LEFT JOIN `countries` ON user_profiles_dealers.country_id = countries.id 
WHERE (users.is_active=1) 
AND (((SELECT COUNT(*) FROM adverts WHERE user_id = users.id AND is_archived = 0 AND  is_deleted = 0) > 0) OR is_premium_dealer > 0) 
AND company_name like '%autocraft%' limit 5\G 

結果:

*************************** 1. row *************************** 
is_premium_dealer: 0 
company_name: A Company 
innerquery: 0 
logicissue: 1 
1 row in set (0.00 sec) 
+0

相信我可以在BINARY(is_premium_dealer)中包裝is_premium_dealer ..現在就測試。 –

回答

1

的答案是,這似乎蒙上了字符串或任何爲可預期來評估一個二進制值的二進制()函數來包裝is_premium_dealer。

0

那是因爲is_premium_dealer = 1通過ENUM 過濾記錄索引。從文檔 - ENUM值在內部表示爲整數

The ENUM Type

假設我們有 - enum_column ENUM('dog', 'cat', 'snake') 則:

  • WHERE enum_column = 1將顯示記錄,其中enum_column = '狗'
  • WHERE enum_column = 2將顯示記錄,其中enum_column = '貓'
  • 等等...

因此,您可以在WHERE條件中使用數字並且不使用BINARY函數,只需指定正確的枚舉索引即可。

相關問題