我有一个包含以下字段的表
id | Name | Gender | Country | Math | English | Science
---------------------------------------------------------------
1 | Paul Allen | Male | USA | 4 | 2 |
2 | Andrew Cur | Male | GBR | | 1 | 2
3 | Paul Hanz | Male | GER | 5 | 2 | 2
4 | Angela Dow | Female | AUT | 3 | | 1
5 | Dana Loconto | Female | USA | 2 | |
我的用户可以使用html表单和php以多种方式过滤此表。 他们可以按用户名过滤,按国家/地区过滤,按性别过滤。这很简单。我的问题是,我需要能够根据等级进行过滤。例如:
“我想知道所有女性的数学等级分别为2和3,并且科学等级为1”。
即使我知道如何使用AND和OR手动编写查询,但事实证明,根据我的用户使用表单传递的参数,我很难组织最终查询。特别是在成绩方面。
任何能够引导我走向正确道路的见解?
编辑:经过一些建议后,我还使用了以下内容:
'code' $cchair = count($_POST['f_chair']);
$commas = 1;
$query_officials .= " AND o_math IN (";
foreach($_POST['f_math'] as $val) {
$query_officials .= "'".$val."'";
if ($commas < $cchair) { $query_officials .= ", "; $commas++; }
}
$query_officials .= ")";
答案 0 :(得分:0)
下面这样的东西应该有效。 请注意,您需要允许多个选择某些值(例如,您可以在下拉列表中选择多个等级),因此您可以像这样构建查询。我没有完全测试这件作品,但之前使用过这种方法并且它有效。
$query = “select * from mytable where ”
If(isset($_POST['gender']) { //First field
$query .= "gender = " . $_POST['gender']
}
If(isset($_POST['math']) { //Second field (array type of field since there could be more than one choice in the drop down)
$query .= "AND math in ( ";
foreach($_POST['math'] as $value)
{
$query .= $value . ','
}
$query .= ')';
}
//You repeat this for every field that has a value from your form