2012-03-05 69 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传递到列