2011-01-02 21 views
1

私はいくつかの助けを借りて、特定の状況でこの検索結果を返すことができました。ユーザーは2つのフィールドを入力する必要があり、空白のままにしたり、両方を入力したりできます。フィールドは車両とキーワードです。車両フィールドは、メイク、モデル、VIN、トラック番号(多くの場合2〜3桁または2桁の数字の後に続く文字)、およびトラックテーブルに属する他のいくつかのフィールドに基づいて検索することができます。このキーワードは、maintenanceおよびmaintenance_partsテーブルのほとんどのフィールド(作業の説明、部品名、部品番号など)を検索するためのものです。現在、キーワードフィールドを空白のままにしておくと、車両フィールドに有効な結果があっても結果は返されません。特定の状況でこのSQLの結果を返すにはどうすればよいですか?

+0

「この検索をより効率的にし、より良い結果を見つけ出すためにいくつかの助けを借りることができます。 –

+0

私の主な関心事は、keywordsフィールドが空白の場合、vehicleフィールドに入力されたものに対して有効な結果があっても結果が見つからないということです。 –

+0

@ジョシュ:あなたの質問を編集して、そのことを反映させることをお勧めします。 –

答えて

1

あなたのANDのいくつかをORに変更し、ORをかっこにする必要があります。

今のところ、$ vehicle MATCHのうちの1つとの$キーワードのが一致する必要があります。代わりに、私はあなたが$車または $キーワードのいずれかを要求したいと思うと思う。

また、$キーワードの一致を1つのMATCH呼び出しに組み合わせることはできますか?そして、私はT.truck_numberに対するLIKEチェックは、その列を含むMATCHが与えられていると重複していると思います。その場合、あなたは、SQLとしてのその部分を書くことができ:

AND (MATCH(T.truck_number, T.make, T.model, T.engine, T.vin_number, 
     T.transmission_number, T.comments) AGAINST('$vehicle') 
    OR MATCH(P.part_num, P.part_desc, P.part_ref,M.comments, M.work_done) 
    AGAINST('$keywords')) 

そして、私はあなたが作成し、動的SQLをエスケープすることにより、SQLインジェクションから身を守る義務についてのコメントが含まれています。

関連する問題