簡體   English   中英

false或false =在MySQL中為true? 非常奇怪的行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM