2016-07-26 4 views
0

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を追加しないことが確実な場合

+0

英数字以外の文字を削除する場合は、「好き」または「正規表現」が機能するはずです。このアプローチは、しかし期待される別の結果をもたらすことができます。 – chris85

答えて

1

こんにちは、あなたは、これはあなたを与えるだろう、このqueryを使用することができ、一度phpmyadminでそれを実行しようresult

SELECT * from Aviation where replace(NAME1,'-','') like '%f18%' 

を希望。

詳細はreplace()です。これをお読みくださいhttp://www.w3resource.com/mysql/string-functions/mysql-replace-function.php

+0

完了!それは素晴らしい仕事でした、ありがとう!私は、この答えが、同じ質問のためにここにそれを作る多くの人々を助けることを願っています。 –

関連する問題