找到CSV中哪些值不在DB中的有效方法?

时间:2010-12-10 15:41:17

标签: php mysql csv performance

供应商正在向我们提供其产品的CSV文件。文件上的特定列(例如第3列)是样式编号。此文件有数千个条目。

我们有一个产品的数据库表,其中包含名为manufacturer_num的列,这是供应商样式编号。

我需要找到我们目前没有的供应商产品。

我知道我可以循环抛出CSV文件中的每一行并提取style_number并检查它是否在我们的数据库中。但后来我打电话给每一行的数据库。这将是对数据库的数千次调用。我认为这是低效的。

我还可以构建样式编号列表(作为字符串或数组)以进行一次数据库调用。 类似于:WHERE manufactuer_num IN(...)但是如果列表太大,PHP会不会耗尽内存吗?实际上这会给我我们拥有的那些,而不是我们没有的那些。

这是一种有效的方法吗?

1 个答案:

答案 0 :(得分:6)

将CSV批量加载到临时表中,执行LEFT JOIN,然后获取联接的RHS为NULL的记录。