2011-09-17 14 views
-1

都市、州および郵便番号を1つのテキストフィールドで検索しようとしています。都市、州、および郵便番号を1つのテキストフィールドで検索します。

<form action="" method="post"> 
    <input type="text" name="search_loc" /> 
    <input type="text" name="search_sty" /> 
    <input type="submit" value="search" /> 
</form> 

$query = "SELECT 
     name, street, city, state, zip_code, phone_number, style, description, time 
     FROM sesh 
     WHERE city 
     LIKE '%$search_loc%' 
     OR state 
     LIKE '%$search_loc%' 
     OR zip_code 
     LIKE '%$search_loc%' 
     AND style LIKE '%$search_sty%' 
     "; 

これは、一度に1つのタイプに対して機能します。だから、私は自己によって状態を検索することができます。私はタイプすることができるようにしたい: "シカゴ、イリノイ60493"または何か、それは結果を引き出す。どのように私はこれを行うことができるかに関する任意のアイデア?ありがとうございました。

+0

「クローズ」投票とは何ですか?これは完全に合理的なMySQLの質問です。 –

答えて

0

あなたは、結果セットの「仮想」の欄にあなたはに対して検索しているの列を連結し、このようなもの連結に対する検索用語比較することができます:マッチが正確でなければならないと仮定し

SELECT * FROM sesh WHERE CONCAT(city, ', ', state, ' ', zip_code) = ? 

を。人々は、例えば、「シカゴ、イリノイ」または「IL 60493」と入力することができますなら、あなたは好きに戻すことができます:

SELECT * FROM sesh WHERE CONCAT(city, ', ', state, ' ', zip_code) LIKE %?% 

(クエリにパラメータを表します?)。

これらの例では、ユーザーの句読点はあなたのものと完全に一致していなければなりません(都市はコマンドと1つのスペース、1つのスペースと1つのスペースです)。しかし、それ以上取りたい場合は、ユーザーが入力した項目の空白と句読点をすべて外して次のようにします。

SELECT * FROM sesh WHERE CONCAT(city, state, zip_code) LIKE %?% 
0

オプション1は、空白( "Chicago"、 "IL"、 "60493")に入力した検索語句( "Chicago、IL 60493")を分割して、既に作成したものと同じ検索操作(おそらく句読点をはずしてから)

また、より効果的には、MySQLのフルテキスト検索を使用することもできます。このチュートリアル​​で、使い方の指針を確認してください。潜在的なSQLI攻撃を避けるために、$ search_styを

$query = "SELECT name, street, city, state, zip_code, phone_number, style, description, time 
      FROM sesh 
      WHERE '$search_loc' like concat('%', city, '%', state, '%', zip_code, '%') 
      AND style LIKE '%$search_sty%'"; 

ちょうど$ search_locを脱出することを確認し、:

+0

ありがとう、私はその記事をチェックアウトします。オプトイン1私は完全には従わない。私はpuncのstr_replaceを行うことができました。スペース。しかし、私は都市、州、および郵便番号が別々の列にあります。だから私は一度に1つの列を私のクエリで一致させることができます。 1つのLIKEインスタンスで3つすべてをどのように使用できますか? 1つの列に市区町村があり、コンマなく区切られていれば、どうすれば可能になるかわかります。検索のすべてのputcuationを剥奪より。申し訳ありません。しかし、私はこれをどうやってできるのか理解しようとしています。 – Graham

0

これは動作するはずです。

関連する問題