H5W3
当前位置:H5W3 > 问答 > 正文

多重条件判读查询,代码如何优化?

题目描述

在一个列表数据中,我们可能会有一些筛选条件,这些筛选条件是用户随机勾选的。后端需要根据这些筛选条件做数据查询,就会涉及到某个筛选字段存在,其他的筛选字段不存在的情况。如果用大量的 if 去判断,代码就不够优雅,该如何优化?

相关代码

这里就用 PHP 代码作为示例代码了,正好手里有 PHP 代码。

// 前端请求传入筛选参数
$requestParams = [];
// 根据传入的筛选参数组装筛选条件
$searchWhere = [];
if (!empty($requestParams['id'])) {
array_push($searchWhere, ['id', '=', $requestParams['id']);
}
if (!empty($requestParams['name'])) {
array_push($searchWhere, ['name', '=', $requestParams['name']);
}
if (!empty($requestParams['score'])) {
array_push($searchWhere, ['score', '>', $requestParams['score']);
}
if (!empty($requestParams['dates'])) {
$date = explode(',', $requestParams['dates']);
array_push($searchWhere, ['date', '>', $date[0]);
array_push($searchWhere, ['date', '<', $date[1]);
}
// 查询数据
$items = DB::query()->where($searchWhere)->get();

你期待的结果是什么?实际看到的错误信息又是什么?

能够减少 if 条件的判断。最好是能封装成一个类什么的,来进行处理。减少这种重复、低效的代码。

回答

就根据你这个筛选条件,封装成一个函数返回就可以了。比如常见的:

  1. 分页:page, pageSize, 如果不传就默认第一页,20个
  2. 加载更多:start, size, 如果不传就是第一次
  3. 筛选字段:filter=id,score 后端字符串分割,如果比较复杂,比如大于多少,小于多少这种,就可以定义一个格式,或者直接使用json比较方便。

设计的时候考虑数据库查询是添加条件方不方便,就照着最简单的方式规范一下。

本文地址:H5W3 » 多重条件判读查询,代码如何优化?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址