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

时间:2014-04-10 16:21:46

标签: php sql

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

参数是user,book_id,start和length(开始和长度形成一个范围,使用数据库中表的索引,即startin查看行索引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语句?感谢

4 个答案:

答案 0 :(得分:1)

您可以使用一个语句,并在该变量中添加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)

答案 1 :(得分:1)

为什么选择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

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

答案 2 :(得分:0)

你可以做点什么:

$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应该是什么样子的例子吗?

此致 菲尔,

答案 3 :(得分:0)

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

$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)";