私は数日間、これに対する解決策を見つけようとして頭を悩ませてきました. 幅広い検索用語を処理できる「スマートな」クエリを作成しようとしています。特殊文字が含まれるまでクエリは正常に実行され、コンマやダッシュなどの一部の文字で REPLACE メソッドを使用して成功しました。引用符やアンパサンドなどのその他の文字は、空のクエリになります。
いくつかの例を次に示します。
私が検索している元の名前は "French Is Fun, Book 1 - 1 Year Option" で、以下のクエリを使用すると、次の検索用語で結果が返されます。
1. "French Is Fun"
2. "French Is Fun, book"
3. "French Is Fun, book"
4. "French Is Fun, Book 1"
SELECT * FROM `products` WHERE ( (LOWER(name) LIKE '%french is fun book%' OR
LOWER(replace(name, ' ','')) LIKE '%french is fun book%' OR
LOWER(replace(name, ' ','')) LIKE '%french is fun book%' OR
LOWER(replace(name, '-','')) LIKE '%french is fun book%')
ただし、元のタイトルに「Global History & Geography: The Growth of Civilizations - 1 Year Option」のようにアンパサンドが含まれている場合、これらの異なる検索用語を試してみると、空のクエリが表示されます。
1. "Global History & Geography"
2. "Global History Geography"
私は無駄にこれを試しました
SELECT * FROM `products` WHERE
(LOWER(name) LIKE '%global history geograph%' OR
LOWER(replace(name, ' ','')) LIKE '%global history geography%' OR
LOWER(replace(name, ' ','')) LIKE '%global history geography%' OR
LOWER(replace(name, ',','')) LIKE '%global history geography%' OR
LOWER(replace(name, '&','')) LIKE '%global history geography%' OR
LOWER(replace(name, '-','')) LIKE '%global history geography%');
また、アンパサンドにエスケープ文字を追加しようとしましたが、役に立ちません:
SELECT * FROM `products` WHERE
(LOWER(name) LIKE '%global history geography%' OR
LOWER(replace(name, ' ','')) LIKE '%global history geography%' OR
LOWER(replace(name, ' ','')) LIKE '%global history geography%' OR
LOWER(replace(name, ',','')) LIKE '%global history geography%' OR
LOWER(replace(name, '\&','')) LIKE '%global history geography%' OR
LOWER(replace(name, '-','')) LIKE '%global history geography%');
また、名前のコンマも空の結果を返します。デモンストレーションとして、元の名前は次のとおりです。
「Amsco の AP Calculus AB/BC Advanced Placement Examinations の準備 - 1 年オプション」
この試行は常に空のクエリを返します。
SELECT * FROM `products` WHERE
( (LOWER(name) LIKE '%amscos ap calculus%' OR
LOWER(replace(name, ' ','')) LIKE '%amscos ap calculus%' OR
LOWER(replace(name, '\'','')) LIKE '%amscos ap calculus%' OR
LOWER(replace(name, ',','')) LIKE '%amscos ap calculus%' OR
LOWER(replace(name, '-','')) LIKE '%amscos ap calculus%')
) AND ( (`products`.`type` = 'Rental' ) );
何か案は?