2

基本的に、私の 0 OR 0 は 1 を返しています - それは本当に私が望んでいたものではありません :) 0 OR 0 を選択すると 0 になるので、その理由はよくわかりません..

これは、is_premium_dealer が bool ではなく enum('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)
4

2 に答える 2

1

The answer was to wrap is_premium_dealer in the BINARY() function which seems to cast a string or anything into a binary value which can be evaluated as expected.

于 2012-09-18T08:47:03.833 に答える
0

これはis_premium_dealer = 1、 ENUM indexでレコードをフィルタリングするためです。ドキュメントから - ENUM 値は内部的に整数として表されます

ENUM タイプ

私たちが持っているとしましょう -enum_column ENUM('dog', 'cat', 'snake') そして:

  • WHERE enum_column = 1enum_column = 'dog' のレコードが表示されます
  • WHERE enum_column = 2enum_column = 'cat' のレコードが表示されます
  • 等々...

したがって、WHERE条件で数値を使用でき、BINARY関数を使用せずに、正しい列挙型インデックスを指定するだけです.

于 2012-09-18T09:06:16.683 に答える