如何从MySQL查询当日未完成数据插入操作对应的文件名
调整方案
核心逻辑说明
你现在的脚本只查询了当日已经插入成功的文件记录,要找出未插入的文件,需要先明确「当日预期需要插入的所有文件列表」,再和已成功列表做差集比对即可。
修改后完整代码
// 1. 动态生成当日预期需要同步的所有文件名(按你的业务规则调整日期格式) $today = date('Ymd'); $expectedFiles = [ 'WP_PLU03.CSV', // WP前缀的文件名看起来是固定的,没有日期后缀 "CRM_MASMC_{$today}.csv", // CRM前缀的按日期生成 "MEMBER_{$today}.csv", // 原示例里的20210250属于笔误,按你实际的日期规则调整即可 // 如果有其他需要校验的文件直接加在这即可 ]; // 2. 查询当日已成功插入的文件名(原有逻辑保留,提取文件名列即可) $getFileSycn = $db->SELECT('FILE_NAME,LAST_UPDATED') ->FROM('T_DATA_SYNCHRONIZE') ->WHERE('DATE(LAST_UPDATED) = CURDATE()') ->QUERY()->FETCHALL(); $insertedFiles = array_column($getFileSycn, 'FILE_NAME'); // 3. 计算差集,得到未插入的文件列表 $notInsertedFiles = array_diff($expectedFiles, $insertedFiles); // 4. 处理结果:有未插入的文件就触发通知 if (!empty($notInsertedFiles)) { $notifyContent = "今日未完成插入的文件:" . implode("、", $notInsertedFiles); // 此处补充你的推送逻辑即可,比如发邮件、企业微信、短信 echo $notifyContent; // 原有成功提示逻辑可保留,不需要可删除 foreach($insertedFiles as $file) { echo "{$file} 已插入\n"; } } else { echo "今日所有文件均已插入成功"; }
注意事项
- 如果你业务中预期的文件名规则和示例不同,直接调整
$expectedFiles数组的生成逻辑即可,比如有动态后缀、多个同前缀文件的情况,提前把所有当日要校验的文件都放到这个数组里 - 差集计算默认区分大小写,如果你的数据库里存的文件名大小写不统一,可以先统一转成小写/大写再做比对,避免误判
- cronjob执行时可以把输出结果写到日志里,方便后续排查问题
内容的提问来源于stack exchange,提问作者Hardiyana Hardiyana
相关产品推荐
相关产品推荐

