2012-03-05 31 views
0

私は現在、結果を返すために(3)要因でクエリできる複数のドロップダウンクエリを作成しています。私の問題は効率的な方法でこれをどうやって行うことができますか?複数の可能なMySQLクエリ。複数のドロップダウン動的クエリAJAX PHP MySQL

<select name="class"> 
<OPTION VALUE='any'>Choose Class 
<option value="a">Block A</option> 
<option value="b">Block B</option> 
<option value="c">Block C</option> 
</select> 

<select name="category"> 
<OPTION VALUE='any'>Choose Type 
<option value="math">Math</option> 
<option value="science">Science</option> 
<option value="history">History</option> 
</select> 

変数が見つからない場合に適切なパラメータを正しく選択するMySQLクエリを正常に作成する方法を教えてください。たとえば、最初のドロップダウンを選択して「クラス」を検索し、2番目のドロップダウンを選択しない場合は、私は、最初のクエリ、2番目のクエリ、またはその両方を実行できるようにしたい。私はPHP、Ajaxを書いて、私はちょうどMySQLのクエリの正しい構造について困っている。

答えて

0

「WHERE」節条件を1つの配列に配置します。私はこのように行うだろう:

// filter out invalid values is important 
$valid_class = array('a', 'b', 'c'); 
$valid_category = array('math', 'science', 'history'); 

// initialize array for WHERE clause conditions 
$where = array('TRUE'); 

if (in_array($_POST['class'], $valid_class)) 
{ 
    $where[] = 'class = "' . $_POST['class'] . '"'; 
} 

if (in_array($_POST['category'], $valid_category)) 
{ 
    $where[] = 'category = "' . $_POST['category'] . '"'; 
} 

// use the array with the "implode" function to join its parts 
$sql = 'SELECT * FROM table WHERE ' . implode(' AND ', $where); 

は、ユーザーがクラスでもないカテゴリ別にフィルタリングしない場合にはそこにある「TRUE」より面白い何か(と$where配列を初期化したい場合があり、行っておりませんので配列が最後の行に到達するところで空の$が必要です)。例:

$where = array(); 
$where[] = 'name = "' . mysql_real_escape_string($_POST['name']) . '"'; 
+0

ありがとうございます。 –

0
はバラバラにクエリを分割し、それを使用

条件付き

と仮定します。$classは、クラス選択ボックスのためのものであり、$category

$selectquery = "select * from tablename "; 
if($class != "" && $category == ""){ 
$selectquery .= "WHERE class='".$class."'"; 
}elseif($class == "" && $category != ""){ 
$selectquery .= "WHERE category ='".$category."'"; 
}elseif($class != "" && $category != ""){ 
$selectquery .= "WHERE category ='".$category."' AND class='".$class."'"; 
} 
0
<select name="class"> 
<OPTION VALUE="">Choose Class 
<option value="a">Block A</option> 
<option value="b">Block B</option> 
<option value="c">Block C</option> 
</select> 

<select name="category"> 
<OPTION VALUE="">Choose Type 
<option value="math">Math</option> 
<option value="science">Science</option> 
<option value="history">History</option> 
</select> 

は上の表の列を設定し、カテゴリ選択ボックスのためであるウルMySQLがNULLを許可するように ユーザが "<OPTION VALUE="">Choose Type"または "<OPTION VALUE="">Choose Class"を選択した場合は、ヌルを列に入れます

関連する問題