【问题标题】:What is the best way to update mysql tables using cron jobs? [closed]使用 cron 作业更新 mysql 表的最佳方法是什么? [关闭]
【发布时间】:2019-01-25 10:59:41
【问题描述】:

我每天早上 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 作业。

所以如果可能的话,我想回答的问题是:

  • 有没有更好的方法来更有效地更新表?

  • 如果没有,是否可以将我的所有查询合并为一个多查询?

如果有人有任何其他建议,我很乐意。

【问题讨论】:

标签: php mysql csv cron


【解决方案1】:

这就是我要做的

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

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

 RENAME TABLE tempVehicle TO vehicle

RENAME TABLE tempVehicleImages TO vehicleImages

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

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

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

普通表

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

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

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

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

【讨论】:

  • 由于 tempVehicle 中的“图像”部分,我不能只将 tempVehicle 重命名为 Vehicle。图像以逗号分隔列表的形式存储在 tempVehicle 中,这就是我将它们分解到 vehicleImages 表中的原因
  • 创建两个临时表并事先进行爆炸/插入,然后重命名两个表。或者换句话说,预先处理图像,这可能仍然更便宜。那里更新了我的答案(简单)
  • 我无法重命名两个表。不断收到错误“此表已存在”,因此我不得不先删除预先存在的表。设法砍掉了几个 php 文件,但仍然有 4 个不同的文件。
猜你喜欢
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
相关资源
最近更新 更多