用户可以输入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语句?感谢
答案 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)";