我有一个内部库存系统,下面3个表格为根据另一个表引用ID更新/插入大型表记录。
a。股票 - 每日更新一个CSV文件。
---------------------------------
| id | MODELNO | Discount | MRP |
---------------------------------
| 1 | MODEL_1 | 40% | 900 |
| 2 | MODEL_A | 20% | 600 |
---------------------------------
每天这个表将被截断,新的股票数据从一个商人的CSV文件导入。(约6万条记录)
湾布大师 - 主衣服数据库
----------------------------------------
| ref_id | MODELNO | Name | MRP |
----------------------------------------
| 80 | MODEL_1 |Some Dress | 900 |
| 81 | MODEL_A |Another Dress| 600 |
----------------------------------------
的MODELNO
是独一无二的,ref_id
的主键。此表是内部库存应用程序的一部分(拥有大约450万条记录)
c。库存表 - 这是内部应用
-------------------------------------------------
| id | ref_id | Name | MRP | status |
-------------------------------------------------
| 1 | 80 |Some Dress | 900 | ACTIVE |
| 2 | 81 |Another Dress| 600 | INACTIVE |
--------------------------------------------------
此表存储产品中的可用库存的基础上,股票的部分,如果折扣,如果40%以上的产品是ACTIVE
否则默认为INACTIVE
。
所需的功能是,我需要运行一个脚本,这个脚本可以循环存储表记录,并且MODELNO
更新库存表上的库存,并且如果库存表中的记录不存在,那么它需要被添加。
我到现在为止所尝试的是一个PHP脚本。 a。首先,将Inventory表中所有记录的状态设置为INACTIVE。 b。对于库存表中的每个记录,检查布料主表中是否存在MODELNO。 b。如果记录存在,则获取ref_id,并检查相应的库存表和更新/插入记录中是否存在ref_id。
问题是脚本需要超过8个小时才能完成。
你能提出一个有效的方法,可以用来实现上述功能。
注意: 所有插入和更新到清单表使用CodeIgniter的批量插入/更新功能完成。 我将所有状态设置为INACTIVE,因为可能很少有产品不在库存数据库中。
提示:请勿将“%”。 – Strawberry
这样做,顺便说一句我已经使用Mysql Load Inline将CSV文件转储到数据库。还有MODELNO的索引,并且ref_id字段 – epynic