做网站咋做,网站建设与推广工资,杭州网企业网站建设,网络公司办公室图片目录 一#xff1a;背景
二#xff1a;查询实例
三#xff1a;总结 一#xff1a;背景
我们在实际业务的开发过程中#xff0c;经常会碰到这样的场景#xff0c;查询某些部门的客户信息#xff0c;查询下过订单的客户信息。这里查询客户信息实际上就用到了子查询背景
二查询实例
三总结 一背景
我们在实际业务的开发过程中经常会碰到这样的场景查询某些部门的客户信息查询下过订单的客户信息。这里查询客户信息实际上就用到了子查询通常客户表会有一个字段表示归属员工。通过这个字段可以知道员工的id。同样的员工表会有部门信息同时订单表也有客户信息。这样我们在客户信息要做到两步。第一步实际上是查询员工id或者客户id的集合第二步再通过这些集合查询客户表获取客户信息。
二查询实例
1比如说我们查询某个部门的客户信息 $customerList Db::name(customer) -when($param[customer_type] ?? false, function ($query) use ($param) { $query-where(user_id, in, function ($query) use ($param) { return $query-name(user)-where(structure_id,in,function($query) use ($param) { return $query-name(structure)-when(true,function($query) use ($param) { $query-where(id, , $param[dept_id]); })-field(id); })-field(id); }); }) -field(id,name,create_time) -limit(100) -select() -toArray(); 这里我们构造两个子查询第一个子查询查询员工信息第二个子查询查询部门信息查询部门的时候我们传入部门id作为参数这样我们这个sql就实现了查询部门id是特定值的客户的信息
这里传入的参数还可以和部门有关的名称或者等级等这样我们只需要根据入参的不同修改子查询 return $query-name(structure)-when(true,function($query) use ($param) { $query-where(id, , $param[dept_id]); })-field(id);
比如说查询名称 return $query-name(structure)-when(true,function($query) use ($param) { $query-where(name, like, %-.$param[dept_name]. -%); })-field(id);
这样也方便我们后期的搜索。
我们还可以根据多个条件查询
return $query-name(structure)-when(true,function($query) use ($param) { $query-where(id, , $param[dept_id]); $query-whereOr(level, like, %-.$param[dept_level]. -%); })-field(id);
同时查询满足部门id和等级的条件搜索。
2查询下过订单的客户信息 $customerList Db::name(customer) -when($param[customer_type] ?? false, function ($query) use ($param) { $query-where(id, in, function ($query) use ($param) { return $query-name(order)-where(status,,1)-field(uid); }); }) -field(id,name,create_time) -limit(100) -select() -toArray(); 我们这里查询订单状态是1的客户id集合再通过id集合获取客户信息。这样查询有个好处就是我们的sql语句会比较短这样sql执行过程中也不会出现sql语句超过长度。试想下如果我们不使用子查询先根据条件查询到下过订单的客户id集合然后再通过id集合通过where in的方式查询客户表如果我们的下单客户数量巨大那么这个sql语句是很长的。执行会出问题。
三总结
以上就是thinkphp下子查询的使用通过子查询配合多个表的联查和关联搜索还是很方便的。