php - 使用 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 中的新信息获取到表中。
我是这样设置的:
- 放下 tempVehicle,彻底擦桌子
- 为新表重新创建 tempVehicle
- 将 CSV 数据导入 tempVehicle,用作临时信息持有者
- 从 vehicleImages 表中删除所有数据,以便我可以从主表(车辆)中删除项目
- 从车辆表中删除所有数据
- 从 tempVehicle 插入到车辆表
- 通过分解 CSV 中的图像链接来更新车辆图像,然后“插入忽略”到车辆图像中
我总共有 7 个 PHP 文件,每个文件都与上述步骤之一相关联。我这样做是因为它们必须以特定顺序发生,而我无法弄清楚如何在保持特定顺序的同时让多查询工作。
在一个完美的场景中,我希望在一个 php 文件中使用单个多查询来设置它。我计划每天使用一个 cron 作业来运行这个文件,并且宁愿不必运行多个 cron 作业。
因此,如果可能的话,我想回答的问题是:
有没有更好的方法来更有效地更新表格?
如果没有,是否可以将我的所有查询合并为一个多查询?
如果有人有任何其他建议,我很开放。
解决方案
这就是我会做的
- 为新表创建 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
,例如。这样我就知道当我看到复数表时它是一个联结表(两个或多个表名)。否则我不必考虑它的车辆图像、车辆图像、车辆图像、车辆图像或任何其他组合。
推荐阅读
- node.js - 每次在猫鼬中插入一个带有旧信息的新文档
- javascript - 如何制作 javascript/mailchimp 函数以在点击时提交表单数据
- reactjs - 为子组件分配 props 的正确方法
- javascript - 图片的动画不起作用!Vue.js
- python - 如何在没有 MemoryError 的情况下将 183,223,040x4 矩阵重塑为 140 个尺寸为 1145x1145 的矩阵?
- javascript - 如何将输入文件参数从 html 页面传递到 Javascript
- c - 数据数组的 mmap 函数
- kubernetes - Kubernetes 中的资源分配:如何调度 Pod?
- javascript - 如何将数组添加到 vue-kanban 块
- java - 云配置收到请求执行错误。来自 Eureka 服务器的 endpoint=DefaultEndpoint{ serviceUrl='http://localhost:8761/}