MySQL连表更新事件维护优化
数据库  /  管理员 发布于 5年前   602
优化前:
-- 备忘备注:超过账期宽限期未结款,变更机构状态“已冻结”;结清恢复; 合同授信过期按上一次合同账期,屏蔽临时授信 UPDATE bota_corper as a, ( SELECT bm.corperid,bm._corperid, sum(if(bm.settlestatus=0,1,0)) num, (select IFNULL(sum(remain),0) from bota_corper_credit as ct where ct.corperid = bm.corperid and ct.type=1 ) as ctremain FROM `bota_corper_bill_month` bm inner join `bota_corper` c on bm.corperid = c.id where date(date_add(CONCAT(bm.month,'-',c.expired),INTERVAL 1 MONTH)) < date(now()) group by corperid ) as b SET a.status = if(b.num > 0 && a.remain < 0,4,3), a._status = if(b.num > 0 && a.remain < 0,'已冻结','正常') WHERE a.id = b.corperid and b.ctremain > 0
优化后:拆分两步利于维护
-- 事件名称:机构状态自动冻结
UPDATE bota_corper as C,
(
SELECT DISTINCT
A.corperid
FROM
bota_corper_credit A,
bota_corper_bill_month B
WHERE
A.type = 1
AND
A.corperid = B.corperid
AND B.settlestatus = 0
AND B.presettle < CURDATE()
) as D
SET
C.status = 4,
C._status = '已冻结'
WHERE
C.id = D.corperid
-- 事件名称:机构状态自动解冻
UPDATE bota_corper as C,
(
SELECT DISTINCT
A.corperid
FROM
bota_corper_credit A,
bota_corper_bill_month B
WHERE
A.type = 1
AND
A.corperid = B.corperid
AND B.settlestatus = 1
) as D
SET
C.status = 3,
C._status = '正常'
WHERE
C.id = D.corperid
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号