如何避免24 IF语句选项SQL查询参数


How to avoid 24 IF statements option SQL query parameters

用户可以输入4个搜索参数来执行此sql搜索,但所有参数都是可选的。

参数是user、book_id、开始和长度(开始和长度形成一个范围,使用数据库中表的索引,即开始查看行索引5并返回我的4条记录)

$user = $_GET['user'];
$book_id = $_GET['book_id'];
$start = $_GET['start'];
Slength = $_GET['length'];

//查找项目的长度,以索引-1 结束

$end = $start + $length -1;

有4个可选的搜索参数,可以执行24个不同的SQL查询状态?

如何避免写24条IF语句?感谢

为什么是24?

你只需要4:就可以做到

$sql = 'SELECT * FROM table WHERE 1';
if ($user) {
    $sql .= " AND user = '{$user}'"
}
if ($book_id) {
    $sql .= " AND book_id = '{$book_id}'"
}
//... and so on

这是一个简单的解决方案。对于更复杂的事情,您必须创建一个查询生成器。

您可以使用一条语句,并在变量中添加null的可能性

select * from your_table
where (username = $user or $user is null)
and (book_id = $book_id or $book_id is null)
and (start = $start or $start is null)
and (end = $start + $length - 1 or $length is null)

您可以执行以下操作:

$fields = array("user", "book_id", "start", "length");
foreach($fields as $field){
    if(array_key_exists($field, $_GET) && strlen($_GET[$field]) {
        // your bit of SQL stuff here ...
    }
}

尽管这并不是一个真正的巨大改进,因为它使代码更难阅读。

你能给我一个最终SQL应该是什么样子的例子吗?

谨致问候,Phil,

您可以使用查询和一些条件代码,比如:

$query =<<<END_QUERY
        SELECT * 
        FROM table
        WHERE (user LIKE '%$user%' OR book_id = $book_id)
END_QUERY;
if($start && $end)
    $query .= "AND (id BETWEEN $start AND $end)";
elseif($start)
    $query .= "AND (id >= $start)";
elseif($end)
    $query .= "AND (id <= $end)";