我正在尝试创建一个PHP脚本来过滤MySQL DB的数据。使用HTML选择标签选择过滤器。
问题是,有很多过滤器,用户只能选择其中一些。我对如何使用PHP动态调整MySQL Select语句,以便仅使用用户选择的过滤器感到困惑。也就是说,如果用户选择Schooltype和地区。查询是这样的:
"SELECT * FROM mydatabase
WHERE SchoolType='SelectedSchoolType'
AND District='SelectedDistrict'"
,然后如果用户还选择过滤器中的县,则SQL语句会调整为:
"SELECT * FROM mydatabase
WHERE SchoolType='SelectedSchoolType'
AND District='SelectedDistrict'
AND County='SelectedCounty'"
如何根据所选的过滤器进行SQL语句调整?
在您的PHP页面上,您需要:
- 检查选择值(Switch)
- 从这些选择(我使用过爆炸) 中构造查询
- 运行查询(如往常一样)
示例:
<?php
$sql = "Select * FROM mydatabase";
$conditions = array();
switch($_POST['select_1']){//you can have mutiple switches
case "school":
$conditions[] = "SchoolType = '".$_POST['select_1_text']."'";
break;
case "district":
$conditions[] = "District = '".$_POST['select_1_text']."'";
break;
//etecetera
}
if(count($conditions)){
$sql.= " WHERE ";
$sql.=implode(" AND",$conditions);
}
//Run your query
检查有关动态查询的相关问题
因此,首先您需要将过滤器类型ID和选定值发送到服务器端。例如,您可以使用jQuery(对于1个选定的值):
$.ajax({
method: "POST",
url: "path_to_your_script",
data: {
type: $("your_element:selected").val(),
filter : $("your_element:selected").text()}
});
然后在服务器端您可以动态创建数据库查询:
<?php
$input_filter = $_POST['filter'];
$my_mapped_type = get_mapped_type($_POST['type']); //for.ex. you store it in db
$base_query = "SELECT * FROM mydatabase";
if(isset($input_filter) && isset($my_mapped_type)){
$base_query .= " where $my_mapped_type = $input_filter";
}
结果,您将在$ base_query中有整个查询