2009-04-18 11 views
1

私は2つのテーブルを持っている:MySQLでは、3つのフィールドを持つ検索フォームから複数の値を取得するにはどうすればよいですか?

  1. テキスト入力フォームの名前で記入する:

    1. クライアント
    2. 都市

    は、次に検索フォームで、私は三つのフィールドを持っていますクライアントの

  2. 検索する都市を選択するための選択ボックス(表の都市)
  3. ユーザーが検索したい主な事業を選択するための別の選択ボックス(ビジネスは顧客テーブルに含まれている)

フォームフィールドの選択に応じて、それは2つのテーブルの検索を行います。

私は、ユーザーの選択に応じて複数のSQLクエリーを実行することを考えています。

問題は多分、ユーザがクライアントの名前を入力フォームを記入していないか、または多分それはということですが、都市を選択しないだろう、など

だから私は、複数のIFSを行う必要がありますユーザーの選択に応じて複数のSQLクエリーを表示するには?多分私はあまり混乱しない解決策を持っているかもしれません...

答えて

2

多分あなたのデータベース構造はあなたを助けるために変えられました。たとえば、都市とクライアントの関係があるとします。ビジネスは「Tech」や「Search」のようなものですが、その場合、同じビジネスを持つ複数のクライアントを持つことができますか?ビジネスを別のテーブルに移植し、それらを参照する価値があります。そして、次のような単純なクエリ持つことができます。

SELECT * 
FROM clients 
WHERE clients.city = {form result: cities.id} 
AND clients.business = {form result: businesses.id} 
ORDER BY clients.name 
LIMIT 0, 30 

は今、次の2つの選択肢を持っている(例えば都市)、ユーザいずれかのフィールドに記入していないと仮定すると:ユーザーの入力または使用することを検証することにより、それを埋めるためにそれらを強制しますこれをワイルドカードとして使用すると、クエリからWHERE clients.city句を削除できます。あなたの<select>オプションの値がidからCitiesのものであると仮定します。

プログラムで、私はこのケースでクエリを作成したい:フィルタは、フィルタリング方法のあなたの選択である

$queryStr = 'SELECT * FROM clients'; 
if (!empty($_POST['city']) && !empty($_POST['business'])) { 
    $queryStr .= ' WHERE city = ' . filter($_POST['city']) . ' AND business = ' . filter($_POST['business']); 
} elseif (!empty($_POST['city'])) { 
    $queryStr .= ' WHERE city = ' . filter($_POST['city']); 
} elseif (!empty($_POST['business'])) { 
    $queryStr .= ' WHERE business = ' . filter($_POST['business']); 
} else { 
    // pass 
} 
$queryStr .= ' ORDER BY name LIMIT 0, 30'; 

を。

+0

ビジネステーブルは既に作成されていますが、クライアントテーブルには接続されていません。私のクライアントは、使用するアクセスデータベースを私に与えましたが、非常に古くてよく作られていません。クライアントのテーブルには、ビジネスのフィールドもあります。 500の企業があります。ビジネスの名前をIDに変換するにはどうすればよいですか?優秀な人を作って改宗をするのですか?私はひとつずつやる必要がありますか? – dutraveller

+0

私はAccessで多くの作業をしていません。(私はmysql/pgsqlを使って作業します。テーブルをcsvとしてダンプしてインポートする方が簡単かもしれません)。それぞれのビジネスの名前をIDとして使用するのではなく、私はID番号(アクセス番号のオートナンバー)を各自に与え、それらを参照します。 – Ross

1

DBに条件を照会するだけです。実際にクライアント/都市が存在する場合は表示され、そうでない場合は空のセットが返されます。簡単なので、どちらかの存在を検証する必要はありません。ユーザーは、たとえば既存の都市名を思い付くには十分にスマートでなければなりません。

あなたが行う必要があるのは、mysql_real_escape_string()です。

+0

$ _POST ['変数']のmysql_real_escape_string()は正しいですか? – dutraveller

+0

はい (少なくとも10文字までのパディング) – Flavius

関連する問題