2012-03-05 71 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查詢,以便在變量缺失的情況下正確選擇正確的參數。例如,如果他們選擇做第一個下拉菜單,只搜索「班級」而不選擇第二個下拉菜單。我希望能夠做第一個查詢,第二個查詢或兩者。我寫了PHP,寫了Ajax,我只是難以理解MySQL查詢的正確結構。

回答

0

將您的「WHERE」子句條件放在一個數組中。我會做這樣的:

// 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); 

您可能需要初始化$where陣列東西比「TRUE」更有趣的(​​這是有萬一用戶不按類既不類別篩選,因爲我們不想要一個空的$,其中數組到達最後一行)。例如:

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

非常適合我,非常感謝。 – 2012-03-05 15:00:32

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允許爲空 因此當用戶選擇「<OPTION VALUE="">Choose Type」或「<OPTION VALUE="">Choose Class」時,將NULL傳遞到列