2011-07-26 4 views
2

Paul JDPaulが同一人物であると仮定すると、PaulまたはPaul JDを検索するときのいずれかPaulPaul JDの両方を返します検索のための正しいMySQLの文は何ですか?PaulとPaul JDの例をMySQLで検索しますか?

私のMySQLの声明:

$sql=mysql_query("SELECT * FROM people WHERE name Like '%$h%' LIMIT 0, 5"); 

この文は戻らないPaulときPaul JDを検索します。

+0

ポールソンも同じユーザーで、PautやPはどうですか? – Nin

答えて

0

「Paul JD」は検索しないでください。「Paul」と「Paul JD」の両方を見つける「Paul」を検索する必要があります。 "Paul JD"は "Paul"の部分文字列ではありませんが(逆ですが真です)

+0

-1この解決法は、ユーザに負担をかける。例えば"医者、私がこれをすると痛い。医者は答える:それをしないで!" –

+0

プログラムは「JD」を取り除く方法を他の方法で知っていますか?それが重要かどうかはどうしたら分かりますか?ユーザーだけがそれを知っています。 –

+0

それは何も取り除かないでしょう、それはよりスマートになり、引数を分割します。私とRajの答えを見てください。私たちはどちらも同じアイディアを思いついた。 –

0

PAUL JDを2つ(スペースで区切って)に分割して検索する必要があります。

$sql=mysql_query("SELECT * FROM people WHERE name Like '%$FirstWord%' OR name Like '%$SecondWord%' LIMIT 0, 5"); 

しかし、これはかなりすぐにポールJDまたはPAUL JDで一致することになるでしょうとして厳しい取得する予定です。

$sql=mysql_query("SELECT * FROM people WHERE name Like '%$FirstWord%' OR name Like '%$SecondWord% OR name Like '%$FirstWord%$SecondWord%' LIMIT 0, 5"); 

複雑になるにつれて、テンポラリテーブルを作成し、受信した文字列をその中に入れ、JOINとマッチを使用することができます。

0

ファジースタイルの検索を有効にするには、検索引数を空白に分割し、その中に含まれるパラメータの数に基づいてクエリ文字列を動的に構築する必要があります。

だから、「ポール・JD」は、例えば、あなたのクエリ文字列は、次のようになります。

$sql = mysql_query("SELECT * FROM people WHERE name Like '%$h1%' OR name like'%$h2%' LIMIT 0, 5"); 

そして、それが実行されたとき、それは次のようになります。あなたのファジー検索で本当にツルツル取得するには

SELECT * FROM people WHERE name Like '%Paul%' OR name like'%JD%' LIMIT 0, 5 

関数としてLevenshtein Edit Distance algorithmを実装することができます。それを使用して結果をフィルタリングします。

関連する問題