2

mysql で単純なキーワード比較クエリを作成しようとしましたが、何らかの理由で、すべて数字のキーワードがすべて数字の検索用語と一致しません。

製品のテーブル、キーワードのテーブル、結合テーブルがあります。簡単にするために、結合を実行するビューを使用して、製品 ID ごとのキーワード文字列の単純なリストを提供します。特に 1 つの製品には「John」、「Deere」、「8000」、「Midroller」の 4 つのキーワードがあり、これらはビューと結合時に正しく表示されます。

私が問題を抱えているのは、(keyword = "8000") が "8000" キーワードに当てはまらないことです。

SELECT a.id, kw.keyword AS keyword, (kw.keyword = 'John' OR 
  kw.keyword = 'Deere' OR 
  kw.keyword = "8000" OR 
  kw.keyword = 'Midroller') AS matched
FROM `kc5n2_product` AS a
INNER JOIN `product_keywords` AS kw ON a.id = kw.product
WHERE a.id =119

戻り値

id キーワードの一致
119 8000 0
119 ジョン 1
119 ディア 1
119 ミッドローラー 1

私はこれを見てきました: MySql: 数値である 2 つの文字列を比較しますか? しかし、それは本当に役に立ちませんでした。

また、このMySQLクエリは期待を出力していないようですが、数値ではなく文字列として比較しようとしています。

しようとしても

SELECT a.id, kw.keyword AS keyword, (CAST(kw.keyword as Char(4)) = CAST("8000" as Char(4))) AS matched

mysql に両方を文字列として強制的に解釈させようとしても、まったく役に立ちませんでした。

使用すると検索語に一致することがわかりました

kw.keyword LIKE "%8000%"

しかし、この段階では検索をかなり制限したいので、可能であれば LIKE を避けたいと思います。

私が間違っていることは明らかですか?

4

2 に答える 2

3

このような場合、通常、「不正な動作をしている」値に先頭/末尾のスペースがあることを意味します。

このようなクエリを使用して、これらの「悪い」レコードをすべて見つけることができます

SELECT *
  FROM keywords
 WHERE CHAR_LENGTH(keyword) <> CHAR_LENGTH(TRIM(keyword))

これがSQLFiddleのデモです

そして、明らかに、このような簡単な更新でそれらを修正できます

UPDATE keywords
   SET keyword = TRIM(keyword)
 WHERE CHAR_LENGTH(keyword) <> CHAR_LENGTH(TRIM(keyword))

これがSQLFiddleのデモです

于 2013-08-23T04:31:19.193 に答える