首页
下载
插件
案例
社区
文档
视频
资讯
关于
VEITOOL
联系方式
合作代理
插件协议
用户协议
登录
|
注册
全部
后端程序
前端模板
插件二开
综合求助
谈天说地
使用分享
安卓开发
开发ERP中遇到的树形表查询条件嵌套构造
发布:2024-03-15 17:22
分类:后端程序
评论:1
浏览:214
由于树形表具有无限下级的特点,当搜索某关键词时,需要把满足条件子级的顶级记录列出来,并具有分页。此时须用到Join查询,并去重: ``` php // 模型类 ErpWarehouse.php public function listQuery($where = [], $fields = '*', $limit=0) { $d = request()->get('','','strip_sql'); $kw = $d['kw'] ?? ''; $fds = ['code','name','contact','tel','address']; $field = isset($d['fields']) && isset($fds[$d['fields']]) ? $d['fields'] : -1; $sotime = $d['sotime'] ?? ''; $state = $d['state'] ?? ''; $parentid = isset($d['parentid']) ? intval($d['parentid']) : 0; $limit = $limit>0 ? $limit : (isset($d['limit']) ? intval($d['limit']) : 10); if($kw!=''){ if($field>-1){ $where[] = in_array($field,[0,1]) ? [$fds[$field],'=',$kw] : [$fds[$field],'LIKE', '%'.$kw.'%']; }else{ $where[] = [implode('|',$fds),'LIKE', '%'.$kw.'%']; } } if(strpos($sotime,' - ')!==false){ $t = explode(' - ',$sotime); $where[] = ['addtime','>=',strtotime($t[0]." 00:00:00")]; $where[] = ['addtime','<=',strtotime($t[1]." 23:59:59")]; } if(is_numeric($state)) $where[] = ['state','=',$state]; // 区分查询 if($parentid){ // 异步子级返回的数据 【这里对条件集进行了重置】 $where = [['parentid','=',$parentid]]; return $this->where($where)->order(['id'=>'desc'])->field($fields)->select(); //echo $this->getLastSql();exit; //打印SQL }else{ if($where){ // 顶级有搜索时返回的数据,重构数据结构 // ((A表条件组) OR (B表条件组)) AND a.parentid = $parentid // "SELECT DISTINCT a.* FROM vt_erp_warehouse a LEFT JOIN vt_erp_warehouse b ON FIND_IN_SET(a.id, b.arrparentid) WHERe a.parentid = 0 AND b.code LIKE '%Keys%' LIMIT 0,10;"; $where2 = []; foreach($where as &$v){ $where2[] = ['b.'.str_replace("|","|b.",$v[0]),$v[1],$v[2]]; $v = ['a.'.str_replace("|","|a.",$v[0]),$v[1],$v[2]]; } return $this->distinct(true)->alias('a')->leftJoin('erp_warehouse b','FIND_IN_SET(a.id, b.arrparentid)') ->where( function($query)use($where,$where2){ $query->where($where)->whereOr( function($query2)use($where2){ $query2->where($where2); } ); } ) ->where([['a.parentid','=',$parentid]]) ->order(['a.id'=>'desc'])->field('a.*')->paginate($limit); //echo $this->getLastSql();exit; //打印SQL }else{ $where[] = ['parentid','=',$parentid]; // 顶级无搜索返回的数据 return $this->where($where)->order(['id'=>'desc'])->field($fields)->paginate($limit); } } } ``` ![ERP#100%](/file/upload/image/20240315/65f415c7a9a1c.jpg)
树形表
join
distinct
erp
haohao
1 楼
2024-03-15 18:04
<img src="http://img.baidu.com/hi/tsj/t_0006.gif"/>
0
回复 (0)
登录后可回复
发布帖子
作者信息
anna
等级:Lv2
积分:4660
这家伙很懒,什么都没写呢~
最近热帖
Veitool 2.0.1 版新增数据字典相关功能使用
求安装在子目录教程
我下载测试,是PHPSTUDY下测试,提示要求PHP8.1.0,可找遍了也没有这版本
phpspreadsheet+mpdf实现导出PDF
闲话一些后台功能,给vei作者看的
uniapp的移动端,请求官方出个呀
队列任务管理插件开放下载使用
安装veitool框架(phpStudy)
API接口安全性
在线构建器,安装好后提示普通用户无使用次数。这个需要如何解决呢
关于系统
VEITOOL
联系方式
合作代理
服务支持
插件中心
官方文档
社区问答
下载中心
产品下载
应用案例
新闻动态
使用协议
插件协议
用户协议
关注微信
Copyright ©2024 veitool.com 版权所有
粤ICP备17132594号-2