基本上,我的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)
答案 0 :(得分:1)
答案是在BINARY()函数中包装is_premium_dealer,它似乎将字符串或任何内容转换为二进制值,可以按预期进行计算。
答案 1 :(得分:0)
这是因为is_premium_dealer = 1
按ENUM 索引过滤记录。从文档 - ENUM值在内部表示为整数。
假设我们有 - enum_column ENUM('dog', 'cat', 'snake')
然后:
WHERE enum_column = 1
将显示enum_column ='dog'WHERE enum_column = 2
将显示enum_column ='cat'因此,您可以在WHERE条件中使用数字而不使用BINARY函数,只需指定正确的枚举索引。