美文网首页
生成查询所需要的条件,排序方式

生成查询所需要的条件,排序方式

作者: 聚齐 | 来源:发表于2017-07-24 00:00 被阅读12次

/**

*生成查询所需要的条件,排序方式

*@parammixed $searchfields查询条件

*@paramboolean $relationSearch是否关联查询

*@returnarray

*/

protected functionbuildparams($searchfields=null,$relationSearch=null)

{

$searchfields= is_null($searchfields) ?$this->searchFields:$searchfields;

$relationSearch= is_null($relationSearch) ?$this->relationSearch:$relationSearch;

$search=$this->request->get("search",'');

$filter=$this->request->get("filter",'');

$op=$this->request->get("op",'');

$sort=$this->request->get("sort","id");

$order=$this->request->get("order","DESC");

$offset=$this->request->get("offset",0);

$limit=$this->request->get("limit",0);

$filter= json_decode($filter,TRUE);

$op= json_decode($op,TRUE);

$filter=$filter?$filter: [];

$where= [];

$modelName='';

if($relationSearch)

{

if(!empty($this->model))

{

$class= get_class($this->model);

$name= basename(str_replace('\\','/',$class));

$name= strtolower(preg_replace('/(?

$modelName=$name.".";

}

if(stripos($sort,".") ===false)

{

$sort=$modelName.$sort;

}

}

if($search)

{

$searcharr= is_array($searchfields) ?$searchfields: explode(',',$searchfields);

$searchlist= [];

foreach($searcharras$k=>$v)

{

$searchlist[] = (stripos($v,".") !==false?$v:"{$modelName}`{$v}`") ." LIKE '%{$search}%'";

}

$where[] ="(". implode(' OR ',$searchlist) .")";

}

foreach($filteras$k=>$v)

{

$sym=isset($op[$k]) ?$op[$k] :'=';

if(stripos($k,".") ===false)

{

$k=$modelName.$k;

}

$sym=isset($op[$k]) ?$op[$k] :$sym;

switch($sym)

{

case'=':

case'!=':

case'LIKE':

case'NOT LIKE':

$where[] = [$k,$sym,$v];

break;

case'>':

case'>=':

case'<':

case'<=':

$where[] = [$k,$sym,intval($v)];

break;

case'IN(...)':

case'NOT IN(...)':

$where[] = [$k,str_replace('(...)','',$sym),explode(',',$v)];

break;

case'BETWEEN':

case'NOT BETWEEN':

$where[] = [$k,$sym,array_slice(explode(',',$v),0,2)];

break;

case'LIKE %...%':

$where[] = [$k,'LIKE',"%{$v}%"];

break;

case'IS NULL':

case'IS NOT NULL':

$where[] = [$k,strtolower(str_replace('IS ','',$sym))];

break;

default:

break;

}

}

$where=function($query)use($where) {

foreach($whereas$k=>$v)

{

if(is_array($v))

{

call_user_func_array([$query,'where'],$v);

}

else

{

$query->where($v);

}

}

};

return[$where,$sort,$order,$offset,$limit];

}

相关文章

  • 生成查询所需要的条件,排序方式

    /** *生成查询所需要的条件,排序方式 *@parammixed $searchfields查询条件 *@par...

  • mybatis example排序

    背景 使用mybatis example方式做查询时候,业务需要按照条件排序,比如:创建时间倒序 example....

  • 核销明细查询in条件过多导致sql超时优化

    现状:查询条件中in条件包含了400+门店的条件 且是返回全表字段,需要排序+分页查询 优化:(前提,做数据归档)...

  • mysql数据库中的多表关联查询

    条件查询 查询全部 查询单独信息 条件查询(有范围) 模糊查询 (like) 排序(order by) 查询我们...

  • 数据库DQL

    基础查询 指定字段查询 指定字段组合不重复记录 条件查询 where后面可以接的条件 举例 结果集排序 多字段排序...

  • mysql排序查询

    进阶3:排序查询 /*语法:select 查询列表from 表名【where 筛选条件】order by 排序的...

  • MySQL排序查询,分组查询,分页查询,聚合函数

    DQL:查询语句 排序查询语法:order by 字句order by 排序字段1 排序方式1, 排序字段2 排序...

  • MySQL学习:DQL:查询语句

    1、排序查询 ORDER BY 排序字段1 排序方式1,排序字段2 排序方式2; 排序方式: ASC:升序,默认的...

  • 数据库查询语句

    条件与逻辑查询 模糊查询 范围查询 排序 聚合函数 分组 连接查询 分页 子查询

  • day37-mysql

    1、DDL 指定字段查询 指定字段组合不重复记录 条件查询 where后可接的条件 举例 结果集排序 多字段排序 ...

网友评论

      本文标题:生成查询所需要的条件,排序方式

      本文链接:https://www.haomeiwen.com/subject/usjvkxtx.html