2012-03-29 12 views
0

私が取り組んでいるプロジェクトで助けが必要です。私は、Webページ上のMySQLとPHPで働いているユーザーの入力内容がわからずにクエリを作成する(SQL、PHP)

:ここ

は私がやろうとしているものです。ユーザーが場所(国、都市、州)、日付、レースの長さまたはレースの名前を入力する入力フィールドがあります。物事は、これらの項目の任意の組み合わせを入力することができます(ちょうどあなたがGoogleでできるように)です。

その後、結果を表示するためにデータベースにクエリを実行しました。これは私が今使っているクエリです:

LIKE '$str%' 
OR city LIKE '$str%' 
OR state LIKE '$str%' 
OR country LIKE '$str%' 
OR race_distancia LIKE '$str%' 

$ strは入力テキストを保持するPHP変数です。

最後に正規表現が追加されているので正しく作成されていませんが、作成したインデックスを使用するので、 '$ str%'を使用しています。たとえば、「マイアミ5k」と入力すると、動作しません。レースはマイアミ5kと呼ばれ、場所もないので...マイアミには5kmあります。

スペース上で入力されたテキストを爆発させたり、展開されたアイテムごとにクエリを実行したり、繰り返した結果を削除することを考えていました。これは動作しますが、私は最も効率的な解決策を見つけようとしており、繰り返されるアイテムを避ける方法が正確にはわかりません。

ありがとうございました!

+1

まず、PDO(PHP Database Object)のようなものを使って、SQLインジェクションを防ぐためのクエリを用意してください。 –

+0

これらはむしろ定義された検索語のようですが、国のための箱があり、市の箱があります。それらのいくつかのリストと他の人のためのフリーテキストがある可能性があります –

+0

スペースで爆発すると動作しません2つの言葉の街があります。また、誰かが州名である「ニューヨーク、ニューヨーク」という都市名を検索した場合、クエリは意図したとおりに機能しません。 – Norse

答えて

0

Full Text Searchは、あなたが使用しての言葉への入力を打破することができ、あなたに

0

を助けるかもしれない:ロサンゼルスの誰かの種類ならば、それは「ロス」と「ロサンゼルス」を検索します

$searchWords = explode(" ", $input); 

を、しかし、私それが十分にうまくいくと思います。多くの結果がある場合は、より多くの入力フィールドを使用してより高度な検索を行うことができます。

編集:私はあなたがこれを遠くに得るのを見た。ダブルワードをフィルタリングするには、PHP : Find repeated words with and without space in text

Edit2:ロサンゼルスの問題:おそらく "Los Angeles"を検索語として使用できます。 PHP explode the string, but treat words in quotes as a single word

関連する問題