1 回答
TA贡献1820条经验 获得超9个赞
问题是,如果你得到一个过滤器,你会用正确的过滤器发出一个 db-request,但是之后,你仍然在创建默认的 db-request 来获取所有产品。
与其发出多个数据库请求,不如创建一个。您可以根据从客户端获得的过滤器更改查询。
替代方案 #1 - 动态构建查询
像这样的东西:
$whereConditions = [];
$where = '';
if (isset($_POST["manj300"])) {
// Add this filter
$whereConditions[] = 'price<=300';
}
// Here you can add more conditions, just like the above if-statement
if ($whereConditions) {
// We have a condition, implode and add WHERE
$where = 'WHERE ' . implode(' ', $whereConditions);
}
// Now put the where conditions in your query
$query = "SELECT * FROM tbl_product {$where} ORDER BY id ASC";
$result = mysqli_query($connect, $query);
if(mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_array($result))
{
// Your current code
}
}
?>
这种方法的好处是您可以轻松地在同一查询中添加更多条件/过滤器。
缺点是代码变得有点难以阅读。
替代方案 #2 - 选择一个预定义的查询
您可以定义多个查询并选择要使用的查询:
// This is the "get all" query
$query = "SELECT * FROM tbl_product ORDER BY id ASC";
if (isset($_POST["manj300"])) {
// We have a filter, let's override the default query
$query = "SELECT * FROM tbl_product price<=300 ORDER BY id ASC";
}
$result = mysqli_query($connect, $query);
if(mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_array($result))
{
// Your current code
}
}
?>
这种方法的好处是它非常干净,易于阅读和遵循。
缺点是您只能同时启用一个过滤器。
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报