PHP和SQL多重/条件过滤器查询

时间:2018-02-20 21:13:00

标签: php html mysql sql filter

我有一个包含以下字段的表

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 .= ")";

1 个答案:

答案 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