2016-06-15 8 views
3

私のウェブサイトのフィルタ機能を作成しようとしています。私はこれを達成するためにSELECT DISTICTを使用するように言われました。以下は現在私が持っているもので、STATE列のすべての個別の値を取得し、チェックボックスとして表示するので、ユーザーはページの表に表示したい状態をチェックできます。非常に多くの条件のあるDISTINCTを選択

$sql = "SELECT DISTINCT state FROM allproperties"; 
$result = mysqli_query($con,$sql); 

while ($row = mysqli_fetch_array($result)) { 
    echo "<input type='checkbox' name='state' value='" . $row[0] . "'>" . $row[0] . "<br>"; 
} 

私の問題は、このフィルタ機能では、単に国は、表示する選択しない、その郡の選択肢があると思い、メンバーの年齢を条件の多くを持つことになります、メンバーの貢献をエッチングします。ユーザがフィルタリングされた結果を表示するためにDISPLAYボタンをクリックすると、私はこのためのSQLクエリを構築する方法を知らない。単純に「SELECT * WHERE(...)AND ....(....)」を使用することができますが、フィルタフィーチャーにこれを使用すると、次のような条件がたくさんあります。

WHERE (state='CA' OR state='NV' OR state='WA' ..... so on and so fort)

WHERE state=OR('CA','NV','WA')のようにする方法はありますか?そうですね、state=はありませんか?

また、フィルタ機能のサンプルクエリはありますか?フィルタ機能は、音楽ウェブサイトでジャンルなどに基づいて曲を検索する場合と似ています。私は混乱した質問のために事前にお詫びします、私はこれを求めるために正しい質問を見つけることができません。

答えて

5

はい、あなたはIN()を使用することができます。

WHERE state IN('CA','NV','WA'...) 

そのだけではなく、同様の効果をやって、それは多くの方が効率的だ後、OR秒severals、常に不要なOR年代を避けるようにしてください。

@Kulvarで述べたように、あなたはそれはPHP、のようなもので動作させるためにimplode()を使用することができます。

'WHERE state IN(' . implode(',', $states) . ')' 
+1

破は、()は素晴らしい作品:D ' '状態(IN'「(内破、 ')、$ states)') '' – Kulvar

+0

私はimplode()を使わないとPHPでは動作しませんか? $ statesとは何ですか、私はその変数を持っていません:s – jay

+0

値の配列を比較する簡単な方法です、そこにすべての状態オプションを格納する必要があります、GoogleのPHPのimplodeの使用。必要に応じて、すべてのオプションを手動で指定することもできます。 @jay – sagi

関連する問題