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