我在詢問有關如何每午夜運行 PHP 腳本的先前問題后嘗試運行 CronJob PHP 腳本。從那時起,我就被一個看似微不足道的問題所困擾。我讀過幾篇關于從數據庫獲取行、回顯值等的文章,并且已經實現了代碼。但似乎它們并不完全適合運行 php 文件。所以這是代碼<?php$connection = mysqli_connect('localhost', 'root', '', 'pointsmanager');$before0d = "SELECT * FROM points WHERE today_points";$before1d = "SELECT * FROM points_history WHERE 1d_before";$before2d = "SELECT * FROM points_history WHERE 2d_before";$before3d = "SELECT * FROM points_history WHERE 3d_before";$before4d = "SELECT * FROM points_history WHERE 4d_before";$before5d = "SELECT * FROM points_history WHERE 5d_before";$before6d = "SELECT * FROM points_history WHERE 6d_before";$before7d = "SELECT * FROM points_history WHERE 6d_before";UPDATE points_historySET 1d_before = $before0d, 2d_before = $before1d, 3d_before = $before2d, 4d_before = $before3d, 5d_before = $before4d, 6d_before = $before5d, 7d_before = $before6d,WHERE condition;?>這就是我想做的。我想創建用戶每天獲得的積分的歷史記錄。在一個數據庫中,我希望它選擇一個名為 Today_points 的列并將其存儲在變量中:然后,我希望它將數據庫中一周的每個值存儲在一個變量中。最后,通過將所有當前值向右移動來更新points_history并從另一個名為“points”的數據庫獲取名為“today_points”的列的值并將其放入“1d_before”中(因此,每個午夜,所有值都向右移動一位,而“todays point”現在是前一天)可以有人告訴我如何用 PHP 做到這一點。老實說,我已經盡了最大努力做了上面的片段。但這不起作用。任何人向我展示類似的代碼將不勝感激。謝謝!
1 回答

慕蓋茨4494581
TA貢獻1850條經驗 獲得超11個贊
您需要規范化表以將值存儲在單獨的行而不是列中。但是,如果您需要一個關于如何在現有結構中執行此操作的解決方案,那么這里是查詢,
UPDATE points_history?
SET
? ? 7d_before = 6d_before,
? ? 6d_before = 5d_before,
? ? 5d_before = 4d_before,
? ? 4d_before = 3d_before,
? ? 3d_before = 2d_before,
? ? 2d_before = 1d_before,
? ? 1d_before = (
? ? ? ? SELECT?
? ? ? ? ? ? today_points
? ? ? ? FROM
? ? ? ? ? ? points
? ? ? ? WHERE
? ? ? ? ? ? user_id = '123'
? ? ? ? )
WHERE
? ? user_id = '123';
假設您要更新用戶 ID“123”。為了將值向右移動,我們首先將第 6 天的值復制到第 7 天,然后將第 5 天復制到第 6 天,然后將第 4 天復制到第 5 天,依此類推。最后,我們將從today_points表中選擇來更新第一天的值。
這是工作小提琴
- 1 回答
- 0 關注
- 126 瀏覽
添加回答
舉報
0/150
提交
取消