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

时间:2012-09-18 08:15:32

标签: mysql boolean logic

基本上,我的0 OR 0返回1 - 这不是我想要的:)我不确定为什么,因为如果我选择0或0我得到0 ..

我认为这可能是因为is_premium_dealer是一个枚举('0','1')而不是一个bool(不要问我为什么,我没有设计这个数据库!)

有没有人知道这是因为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)

2 个答案:

答案 0 :(得分:1)

答案是在BINARY()函数中包装is_premium_dealer,它似乎将字符串或任何内容转换为二进制值,可以按预期进行计算。

答案 1 :(得分:0)

这是因为is_premium_dealer = 1按ENUM 索引过滤记录。从文档 - ENUM值在内部表示为整数

The ENUM Type

假设我们有 - enum_column ENUM('dog', 'cat', 'snake') 然后:

  • WHERE enum_column = 1将显示enum_column ='dog'
  • 的记录
  • WHERE enum_column = 2将显示enum_column ='cat'
  • 的记录
  • 等......

因此,您可以在WHERE条件中使用数字而不使用BINARY函数,只需指定正确的枚举索引。