首页 > 解决方案 > 使用 cron 作业更新 mysql 表的最佳方法是什么?

问题描述

我每天早上 5:19 都会收到一份 CSV。CSV 中的信息用于填充/更新我的 sql 数据库中的表。

我有 3 张桌子:

tempVehicle (temporary table, just for holding info), 

vehicle (contains most info, main table), 

and vehicleImages (table linked to vehicle by VIN). 

我需要从表中删除新 CSV 中未包含的信息,并将 CSV 中的新信息获取到表中。

我是这样设置的:

  1. 放下 tempVehicle,彻底擦桌子
  2. 为新表重新创建 tempVehicle
  3. 将 CSV 数据导入 tempVehicle,用作临时信息持有者
  4. 从 vehicleImages 表中删除所有数据,以便我可以从主表(车辆)中删除项目
  5. 从车辆表中删除所有数据
  6. 从 tempVehicle 插入到车辆表
  7. 通过分解 CSV 中的图像链接来更新车辆图像,然后“插入忽略”到车辆图像中

我总共有 7 个 PHP 文件,每个文件都与上述步骤之一相关联。我这样做是因为它们必须以特定顺序发生,而我无法弄清楚如何在保持特定顺序的同时让多查询工作。

在一个完美的场景中,我希望在一个 php 文件中使用单个多查询来设置它。我计划每天使用一个 cron 作业来运行这个文件,并且宁愿不必运行多个 cron 作业。

因此,如果可能的话,我想回答的问题是:

如果有人有任何其他建议,我很开放。

标签: phpmysqlcsvcron

解决方案


这就是我会做的

  • 为新表创建 tempVehicle 和 tempVehicleImages
  • 将 CSV 数据导入 tempVehicle 和 tempVehicleImages,用作临时信息持有者
  • 将 tempVehicle 重命名为 vehicle,将 tempVehicleImages 重命名为 vehicleImages

这应该覆盖现有表并同时删除临时表(因为它已重命名)。

 RENAME TABLE tempVehicle TO vehicle

RENAME TABLE tempVehicleImages TO vehicleImages

您可能还必须在重命名后使用 Alter Table 设置索引。

作为我的旁注/讨厌:骆驼外壳不是我命名表格的首选方式,我更喜欢车辆和车辆图像。这样就不存在套管多元化问题。

但是,这只是我做事的方式(但这是你的数据库)。

普通表

  • 全部小写
  • 空格下划线
  • 非复数

连接(桥)表(多对多关系)

  • 全部小写
  • 空格下划线
  • 复数

因此,如果您有vehicle并且image 可以有一个 Junction 表vehicles_images,例如。这样我就知道当我看到复数表时它是一个联结表(两个或多个表名)。否则我不必考虑它的车辆图像、车辆图像、车辆图像、车辆图像或任何其他组合。


推荐阅读