我目前正在创建一个多下拉查询,用户可以通过(3)查询返回结果的因素进行查询,我的问题是如何以有效的方式执行此操作,因此我不会模糊地编写多个可能的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 :(得分: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."'";
}
答案 1 :(得分: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>
在ur MySQL上设置表的列以允许null
因此,当用户选择“<OPTION VALUE="">Choose Type
”或“<OPTION VALUE="">Choose Class
”时,将Null传递到列中
答案 2 :(得分: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);
您可能希望使用比“TRUE”更有趣的内容初始化$where
数组(如果用户不按类别过滤类别,则会出现这种情况,因为我们不希望空的$ where数组到达最后一行)。例如:
$where = array();
$where[] = 'name = "' . mysql_real_escape_string($_POST['name']) . '"';