如何在SQL数据库中根据php的两个参数进行过滤


How to filter based on two arguments from php, in a SQL database

我有一个MySQL数据库,我需要使用的表有9列信息。我的目标是能够根据两个参数进行过滤。例如,该表是关于学生的,所以它有名字,姓氏,id,他们注册的课程,状态,职业年龄和另外两个不太重要的字段的数据。我需要能够过滤,基于学生的状态和/或课程。

到目前为止,我设法完成了php工作,使用表单和选择标记,根据状态进行过滤,但我不知道如何添加第二部分。完成的事情应该能够过滤,仅基于状态,仅基于课程,或基于所选的状态和课程。代码看起来像这样:
if (isset($_POST['filter'])) {
        $search_term = mysqli_real_escape_string($conn, $_POST['filter_status']);
        $q .= " WHERE status = '$search_term'";
    }
    echo $q;
<form method="POST" action="index.php">
    <select name="filter_status" > 
        <option value="confirmed">confirmed</option>
        <option value="declined">declined</option>
        <option value="rejected">rejected</option>
        <option value="pending">pending</option>
        <option value="unconfirmed">unconfirmed</option>
    </select>
    <input type="submit" name="filter">
</form>

这个可以正常工作,我对第二个条件进行了第二次,但是它们不能一起工作。

尝试改变,

$q .= " WHERE status = '$search_term'";

$q .= " WHERE CONCAT_WS(',',status,course) like %'$search_term'%";

您可以在课程后添加任意多列

$filter_status = $_POST['filter_status']; $course = $_POST['course']; $where = 'WHERE 1'; $where .= $filter_status ? " AND status = {$filter_status}" : ''; $where .= $course ? " AND course = {$course}" : '';

你是这个意思吗?当用户选择课程和filter_status使用这两个条件时,另一方面,使用正在选择的条件之一。

WHERE 1总是TRUE,所以它后面可以跟着AND语句

WHERE之后使用ANDOR这个术语

WHERE status = '$search_term' AND course = '$something'

感谢大家的意见。它帮助我找到了正确的方向。我所需要的代码如下所示。它不是很优雅,但它做得很好:

$q = "SELECT *
FROM students";
if (isset($_POST['filter'])) {
    if ($_POST['filter_status'] == null) {
    $search_term2 = mysqli_real_escape_string($conn, $_POST['filter_course']);
    $q .= " WHERE course = '$search_term2'";
} elseif ($_POST['filter_course'] == null) {
    $search_term = mysqli_real_escape_string($conn, $_POST['filter_status']);
    $q .= " WHERE status = '$search_term'";
} else {
    $search_term = mysqli_real_escape_string($conn, $_POST['filter_status']);
    $search_term2 = mysqli_real_escape_string($conn, $_POST['filter_course']);
    $q .= " WHERE status = '$search_term' AND course = '$search_term2'";
}
}

和形式:

<form method="POST" action="index.php">
    <select name="filter_status" > 
        <option value= ""></option>
        <option value="confirmed">confirmed</option>
        <option value="declined">declined</option>
        <option value="rejected">rejected</option>
        <option value="pending">pending</option>
        <option value="unconfirmed">unconfirmed</option>
    </select>
    <select name="filter_course">
    <option value= ""></option> 
        <option value="php">php</option>
        <option value="java">java</option>
    </select>
    <input type="submit" name="filter">
</form>