如果原始行超過2周,我有一個cron作業可將行從一個表移動到另一個表。我正在使用Laravel。移動行保留原始ID,但允許在目標表中自動增加
這裏是時間表通話功能: kernel.php
$schedule->call(function() {
try {
DB::transaction(function() {
$to_move = DB::INSERT("INSERT INTO archived_articles
SELECT * FROM articles
WHERE progress = ?
AND DATEDIFF(CURDATE(), publish_date) > ?"
, ['2', '14']);
if ($to_move) {
$deleted = DB::DELETE("DELETE FROM articles
WHERE progress = ?
AND DATEDIFF(CURDATE(), publish_date) > ?"
, ['2', '14']);
if ($deleted) {
Logging::logCronSuccess("{$deleted} articles archived");
} else {
Logging::logCronSuccess("No articles archived");
}
}
});
} catch (\Exception $e) {
Logging::logCronError($e, 'Cron error archiving articles');
}
})->dailyAt('00:05');
我用CURDATE而不是現在 - 的情況下發生的(雖然不太可能)情況,其中第一個查詢沒有發現什麼,那麼當刪除查詢運行時,從第一個查詢開始,流逝的時間意味着DID查找文章,並且它們將被刪除但不會移動。
我反映的文章表archived_articles表,但在插入,自動遞增ID列,目前正在與原article.id填充。我希望將其保留在自己的專欄中,這樣就永遠不會有碰撞的風險 - 所以我在archived_articles表中添加了一個'article_id'列。
是否有使用INSERT INTO SELECT FROM語句的方式 - 而不必列出列名但在歸檔表格保存自動遞增,並在article_id的列插入article.id ?
不列出列的原因是,如果我們對文章表進行更改 - 這不是不可能的 - 那麼我們必須記住也要更改存檔表,否則該列將被錯過沒有錯誤提出。
您在這裏使用MySQL或MS SQL Server嗎? – jarlh
對不起MySQL(刪除無關標記) – DJC
不應刪除查詢從文章表中刪除記錄而不是archived_articles表? – verhie