PHP批量存数据到MySQL时按max(billno)递增分配新账单号问题
账单号分配逻辑实现方案
实现思路
- 以当前数据库最大账单号为基准值,每碰到一个新的原账单号就将基准值+1作为新账单号分配
- 建立原账单号和新账单号的映射关系,相同原账单号的条目复用同一个新账单号,保证同组条目账单号统一
具体PHP实现代码
// 获取数据库当前最大账单号 $currentMaxBillNo = $this->model_mobileapi->getInvNoIntrans(); // 初始化原账单号→新账单号映射数组 $billNoMapping = []; // 遍历所有待存入数据 foreach ($data as $item) { $originBillNo = $item->inv_no; // 该原账单号还未分配过新号,生成新的账单号存入映射 if (!isset($billNoMapping[$originBillNo])) { $currentMaxBillNo++; $billNoMapping[$originBillNo] = $currentMaxBillNo; } // 给当前条目赋值新账单号 $item->inv_no = $billNoMapping[$originBillNo]; } // 遍历完成后直接将$data批量写入数据库即可
效果验证
以你给出的示例数据为例,逻辑运行结果如下:
初始$currentMaxBillNo为15,映射数组为空
第一次碰到原账单号为3的条目A,$currentMaxBillNo自增为16,映射数组存入3=>16,所有条目A的新账单号统一为16
第一次碰到原账单号为5的条目B,$currentMaxBillNo自增为17,映射数组存入5=>17,所有条目B的新账单号统一为17
后续如果有其他原账单号的条目C、D,会依次分配18、19等顺延的新账单号,完全符合需求
内容的提问来源于stack exchange,提问作者GOBLiN TheDev
相关产品推荐
相关产品推荐

