[英]false OR false = true in MySQL? Very odd behaviour
基本上,我的0或0返回1-這不是我真正想要的:)我不太確定為什么,因為如果選擇0或0,我得到0。
我認為這可能是因為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)
答案是將is_premium_dealer包裝在BINARY()函數中,該函數似乎將字符串或任何內容轉換為可以按預期計算的二進制值。
這是因為is_premium_dealer = 1
通過ENUM 索引過濾記錄。 根據文檔, ENUM值在內部表示為整數 。
ENUM類型 。
假設我們有enum_column ENUM('dog', 'cat', 'snake')
然后:
WHERE enum_column = 1
將顯示enum_column ='dog'的記錄 WHERE enum_column = 2
將顯示記錄,其中enum_column ='cat' 因此,您可以在WHERE條件下使用數字,而無需BINARY函數,只需指定正確的枚舉索引即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.