今天拿到一个需求
在首页做一个用户支付数排名
两个订单表, 结构一样, 现在要把两个表的数据做分组成用户id来做汇总并且排名
基本简化成一个如下的一个需求, (字太丑不要介意)
想了下基础思路, 我想过左右查询, 发现会有问题, 数据不一致.
现在使用了下用联合查询UNION ALL , 基本上
思路先把两个表的数据都查出来, 并且按照用户id分组, 再做一个筛选.
select store_id , sum(price) from
(
SELECT A.store_id, A.price as price FROM a AS A
UNION ALL SELECT B.store_id, B.price as price FROM b AS B
) as t group by store_id
基本测试数据成功 结果如图
然后就可以把自己要的条件, 排序 分组, 等等, 加上去,还加上了排名
完成. 但后期想了一下, 这是一个坑, 复杂的语句, 而且是放置在首页, 后期数据庞大会导致卡死现象
想了一下后期的优化
可以使用定时跑脚本方式来解决.
1: 建表,记录每天排名表
2: 脚本
一 : 每1小时跑一次当前排名 按照当天来更新数据,到每天排名表
二 : 定时清理每天排名表数据
3: 查询直接对该表做查询操作