解析Bug #435
v3.0: Some order data is missing when paging the order list
Start date:
Due date:
% Done:
0%
Estimated time:
4.00 h
Description
Task Details
- Investigate the cause of data loss.
- Bruce
- Report and Solution
Others
Updated by Zhongbao Ye about 1 year ago
Output(2024/10/15) 九亭
原因: order list 分页处理错误
详细信息:
列表显示的SQL查询的步骤:
step 1. 查询满足所有条件的订单ids。 Sql: 【... limit 0, 80】
step 2. 查询所有的order products 数据,sql: 【... order_id in (step 1 的ids)】。
该结果按照order products级别展示,条数肯定是大于/等于80
列表分页查询步骤:
step 1. 根据前端传递offset字段(列表总行数),组装limit数据,Sql:【... limit offset, 80】
step 2. 查询所有的order products 相关字段,sql: 【... order_id in (step 1 的ids)】。
问题出在offset字段,前端offset返回的是order products总行数(order products总行数>=订单总数),这将在后端查询sql时,错误计算limit(正确:limit 80, 80,错误:limit offset, 80)
解决方案:
- 前端正确计算offset(取去重后的order总个数,而不是取所有 order product的总个数)
- 前端框架封装好的offset处理方式,(不推荐)
- 后端修改Sql查询(推荐)
- Old: 查询满足条件的所有order
- New: 查询满足条件的所有order products
因影响性不是很大,紧急度低。暂时先记录于此,后续找时间修改。