我在询问有关如何每午夜运行 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 关注
- 79 浏览
添加回答
举报
0/150
提交
取消