mysqlデータベース(phpを使用)で検索する正しい方法を見つけようとしています。 LIKEおよび%ワイルドカードを使用して、英数字以外の文字を無視して、ユーザー検索とデータベースフィールドを比較します。それはかなり複雑で、私はStackOverflow上のこの件に関するいくつかの他の質問を見てきましたが、誰も答えがないようです。 ...mysqliを使って英数字以外の文字を無視して検索する
MAKE NAME1 NAME2
--------------------------------------------------------
Boeing B-17G Flying Fortress
Boeing F-18E Super Hornet
Lockheed F-16C Viper
Supermarine Spitfire Mk IX
McDonnellDouglas F-18C Hornet
そして今、私は「F18」を検索したユーザーを持っている:
したがって、たとえば、のは、私は次のように「航空」テーブルを持つデータベースを持っているとしましょう
1)私はこれが飛行機のmake、name1、またはname2であるかどうかわからないので、ユーザーが正確なタイプ(つまりf-18c/f18cとf18の両方)を入力したかどうかはわかりません。ユーザーはLIKEワイルドカードを使用して3つのフィールドすべてを%f18%で検索できる検索を入力しました。これは、それは簡単ですが、問題があることがデータベースにF18でLIKE '%のF18の%' OR名1 LIKE '%のF18の%' OR Name2はLIKE '%のF18の%'
2)を作る簡単ですF-18としてリストされているので、%f18%でも一致するレコードは見つかりません。私はFULLTEXTインデックス(英数字を無視して読んでいた)のMake、Name1、およびName2フィールドを索引付けしようとしましたが、LIKE%f18%検索を使用すると返されるレコードは表示されません。 F-18CホーネットとF-18Eスーパーホーネットがマッチします。 RegExを使ってこれを解決することは可能ですか?私はf18の代わりにf-18を検索する場合にユーザー入力検索から英数字以外の文字を簡単に取り除くことができますが、それらをデータベースに保持する必要があります。
質問:私はmysqliを使ってLIKE比較を使って複数のフィールドを検索し、ユーザー入力検索から英数字以外の文字を無視するにはどうすればよいですか?これも可能ですか?
ありがとうございます!あなたがあなたの検索でalphanumeric
を追加しないことが確実な場合
英数字以外の文字を削除する場合は、「好き」または「正規表現」が機能するはずです。このアプローチは、しかし期待される別の結果をもたらすことができます。 – chris85