用户可以输入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)";