larave -- leftJoin IFNULL 链表查询

本文详细解析了在优惠券系统中,如何通过关联优惠券主表和领取表,查询有效优惠券及其剩余可领取数量的数据库查询逻辑。利用Eloquent ORM进行条件筛选,确保返回的数据既包括未过期且有效的优惠券,也考虑到总发放数量限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--- 优惠卷主表 和 领取表的关联 目的查询有效优惠卷(还有可领取的数量)

 

$this->query = (new CouponRule())->newQuery();
if ($where) {
$this->query = $this->query->where($where);
}

$fields = array_merge($fields, [
\DB::raw("IFNULL(receive_count, 0) as coupon_log_count")
]);
if ($isInvalid != '-1' && $isInvalid === '0') {
// 获取有效优惠卷
$this->query = $this->query
->where('coupon_rule.is_invalid', 0)
->where(function ($query) {
return $query->where('coupon_rule.valid_time_end', '>', Carbon::now())->orWhere('coupon_rule.valid_days', '>', 0);
})
->where('coupon_rule.total', '>', \DB::raw("IFNULL(ds_d.receive_count, 0)"));
}
$this->query = $this->query->select($fields)
->leftJoin('coupon_data as d', function ($join) {
$join->on('coupon_rule.id', '=', 'd.coupon_id');
});

转载于:https://www.cnblogs.com/JdsyJ/p/11450965.html

SELECT su.user_id, su.user_name, aui.user_parent_id, su1.user_name AS user_parent_name, COUNT(DISTINCT aui1.user_id) AS member_num_one, -- 一级邀请人数 COUNT(DISTINCT aui2.user_id) AS member_num_two, -- 二级邀请人数 COUNT(DISTINCT aui1.user_id) + COUNT(DISTINCT aui2.user_id) AS total_member_num, -- 总邀请人数 ( SELECT IFNULL(SUM(ad.balance), 0) FROM app_detail ad WHERE ad.user_id = su.user_id AND ad.flow = 1 AND ad.type IN (9,22) ) AS total_commissions, -- 总佣金 ( SELECT IFNULL(SUM(ad.balance), 0) FROM app_detail ad WHERE ad.user_id = su.user_id AND ad.flow = 1 AND ad.type IN (9,22) AND create_time >= CURDATE() - INTERVAL 1 DAY ) AS total_yesterday, -- 昨天总佣金 ( SELECT IFNULL(SUM(ad.balance), 0) FROM app_detail ad WHERE ad.user_id = su.user_id AND ad.flow = 1 AND ad.remark = "DirectPush" AND create_time >= CURDATE() - INTERVAL 1 DAY ) AS direct_push_yesterday, -- 昨天直推 ( SELECT IFNULL(SUM(ad.balance), 0) FROM app_detail ad WHERE ad.user_id = su.user_id AND ad.flow = 1 AND ad.type IN (9) AND create_time >= CURDATE() - INTERVAL 1 DAY ) AS transaction_yesterday, -- 昨天流水 ( SELECT IFNULL(SUM(ad.balance), 0) FROM app_detail ad WHERE ad.user_id = su.user_id AND ad.flow = 1 AND ad.type IN (22) AND create_time >= CURDATE() - INTERVAL 1 DAY ) AS recharge_yesterday -- 昨天充值 FROM sys_user su LEFT JOIN app_user_info aui ON su.user_id = aui.user_id LEFT JOIN sys_user su1 ON su1.user_id = aui.user_parent_id LEFT JOIN app_user_info aui1 ON aui.user_id = aui1.user_parent_id LEFT JOIN app_user_info aui2 ON aui1.user_id = aui2.user_parent_id WHERE su.status = 0 <if test="bo.userId != null">AND su.user_id LIKE CONCAT('%', #{bo.userId}, '%')</if> GROUP BY su.user_id, su.user_name 最终结果是app_user_info 有数据才返回所有
最新发布
08-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值