tp8框架分组查询解决没有数据分组查不出来问题

在开发中,我们经常碰到据根某个字段分组查询,那个分组有6个组,但只有5个组有数据,那个没数据的分组就查不出来。这个在多表联查中就会出现。下面看一个示例:

1.两个表,城市区域表,一个是用户需求表,表字段就不演示了,看懂思路就行。要查询区域对应的需求数量

我原来的查法,没有查出来,看代码

$demand = area::alias('a')
               -> join('UserDemand ud', 'ud.area_id = a.id','left')
               -> where('ud.up_status', 0)
               -> where('a.pid','=',2)
               -> field('a.name,a.id as area_id,count(ud.id) as demand_num')
               -> group('a.id')
               -> select();

上面这样查只查出来了需求表有对应区域的数据,没有的就查不出来,看下面如何解决。下面是改进后的查法

$demand = area::alias('a')
            ->join('UserDemand ud', 'ud.area_id = a.id AND ud.up_status = 0', 'left') // 将条件放在连接上,可以查询出没有数据的区
            ->where('a.pid', '=', 2)
            ->field('a.name, a.id as area_id, COUNT(ud.id) as demand_num')
            ->group('a.id')
            ->select();

改进后就查出来了。就是要把需求表的条件放到join条件里一起加入到area区域表

关键点说明

  1. 条件放在连接上:在 LEFT JOIN 中,将 ud.up_status = 0 的条件放在连接条件中,而不是 WHERE 子句中。这样可以确保即使 UserDemand 中没有匹配的记录,area 表中的所有区域仍然会被包括在内。

  2. COUNT 函数COUNT(ud.id) 会计算 UserDemand 中匹配的记录数。如果没有匹配的记录,返回的 demand_num 会是 0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值