私はオンラインショップを作成しました。私は検索機能に問題があることに気付きました。 ユーザーが検索する文字列を入力すると、私はSELECT * FROM PRODUCTS WHERE DESCRIPTION LIKE %....%
MySQL - 特別な文字の有無を問わず、レコードを検索
この問題は解決しますが、特殊文字に問題があります。私が "préparé"や "côteàl'os"のような製品を持っているとしましょう。ユーザーが「準備する」または「書いてください」を検索すると、製品は見つからないが、そこには製品があります。
他にも問題があります。ユーザーが "dûroc"を検索しても、私の製品がデータベースに "duroc"としてある場合、彼はそれを見つけられません。
また、次のようなものもあります。ユーザーが「準備中」または「コートジムス」を検索します。
この問題を解決する方法、または少なくともそれを小さくする方法はありますか?
のMySQL 5.1.73/PHP 5.6
UPDATE
私は与えられた答えを読んだ後、いくつかの余分なテストを行なったし、私はいくつかの余分な詳細を与えることができます。 MySQL WorkbenchやSequel Proなどのツールを使用すると、すべてうまく動作します。だからSELECT * FROM PRODUCTS WHERE DESCRIPTION LIKE '%prepare%'
またはSELECT * FROM PRODUCTS WHERE DESCRIPTION LIKE '%preparé%'
を実行できます。彼らは両方の記述に "準備"、 "プリペル"または "準備"が含まれているすべてのレコードを返す。 SQL Serverはこれをテストしていないため、MySQLがこれを行ったのかどうかはわかりませんでした。
次にサイトに戻ってください。ユーザーが「準備」とタイプすると、それでもうまくいって、すべてのレコードが上記のように返されます。 しかし、ユーザーが「準備」と入力すると、何も返されません。説明に「準備」が含まれているものさえも返しません。
これは私が使用してPHPでのクエリです:
$qryPLU = sprintf(SELECT * FROM PRODUCTS WHERE DESCRIPTION LIKE "%%%s%%", $conn->real_escape_string($mywgid));
私はこれをエコーするとき私が手:
SELECT * FROM PRODUCTS WHERE DESCRIPTION LIKE '%PREPARé%'
だから、どこかに私は思うéが変更されたデータベースへのそれのようにして、しかし、私は、どのように、どこで、なぜか分からない。
何とか@リバーサルが私が今見ている正しい方向になっていました。
方法についてデータベースを照会する前に検索用語を解析していますか?あなたは 'é=> e、ô=> o'のようないくつかの置換を行い、すべての可能な方法でそれらを結合し、作成されたすべてのキーワードを使ってDBに問い合わせます。 – Reversal
特殊文字をすべてアンダースコア '_'で置き換えることもできます。これは、任意の1文字に一致する特殊文字です。 – Reversal
私と一緒に考えるTnx。私もこのように考えてきましたが、問題はそれを逆転できないことです。ユーザーが「準備」を検索し、DB内に「préparé」と答えた場合、これは失敗します。 – diedie2