繁体   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