如何正确过滤mysql中的多个列

Bhu*_*ani -1 php mysql filter

在此输入图像描述

这是表^^

我可以通过在所有搜索框中输入所有值来过滤数据.

我使用的查询是:

SELECT * FROM `student` WHERE `cpi` >= '$valueToSearch' AND `sem` = '$valueToSearch2' AND `choice` = '$valueToSearch3';
Run Code Online (Sandbox Code Playgroud)

但是,当我不在所有搜索框中输入值时,(使用单个过滤器搜索)表不返回任何内容.

我使用了OR关键字,但它也没有帮助:

SELECT * FROM `student` WHERE `cpi` >= '$valueToSearch' OR `sem` = '$valueToSearch2' OR `choice` = '$valueToSearch3';
Run Code Online (Sandbox Code Playgroud)

Tul*_*oso 5

您希望以仅放入有过滤器的子句的方式构建查询.如果您不想按学期过滤,则不应在查询中提供.

如果您正在使用Laravel或类似的框架,它应该有一个查询生成器,这对于这样的事情非常有用.如果没有,您可以尝试以下版本:

// Init empty array for clauses
$clauses = [];

// Set cpi clause, if any
if ( isset($valueToSearch) ) {
    $clauses[] = "cpi >= $valueToSearch";
}

// Set semester clause, if any
if ( isset($valueToSearch2) ) {
    $clauses[] = "sem = $valueToSearch2";
}

// Set choice clause, if any
if ( isset($valueToSearch3) ) {
    $clauses[] = "choice = $valueToSearch3";
}

// Guard against empty $clauses array
if ( ! empty($clauses) ) {
    $query = "SELECT * FROM `student` WHERE " . implode( ' AND ', $clauses ) . ";";
}
else {
    // Handle empty $clauses array
}
Run Code Online (Sandbox Code Playgroud)