php - 使用 cronJob 和 SQL 为记录创建 PHP 数据库,通过每晚将值向右移动来更新数据库
问题描述
在询问有关如何在每个午夜运行 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_history
SET 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”(因此,每个午夜,所有值都向右移动一个,“今天的点数”现在是前一天)可以任何人都告诉我如何在 PHP 中做到这一点。老实说,我通过上面的代码片段尽了最大的努力。但它不起作用。任何人向我展示任何类似的代码将不胜感激。谢谢!
解决方案
就像 Dharman 所说,您需要规范化您的表以将值存储在单独的行而不是列中。但是,如果您需要如何在现有结构中执行此操作的解决方案,那么这里是查询,
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
表中选择来更新第一天的值。
这是工作小提琴
推荐阅读
- android - 修复 Bitrise 脚本失败的 Git 日志命令需要做些什么
- bash - 如何将包含完整路径的文件移动到子文件夹?
- php - 错误 403 - 没有 storage.objects.create 访问权限
- java - SQL IN Query 是性能更好还是 Java 方法 ContainsAll
- pandas - 额外的引号被添加到数据框中的字符串字段
- amazon-web-services - AWS IAM 角色和 STS
- php - 未定义的变量:第 60 行 NULL Phalcon 上的用户视图
- python - /accounts/sign_up/ create() 处的 TypeError 采用 1 个位置参数,但给出了 2 个
- f# - F# 这个值不是函数
- implode - 剪辑 我想在使用 implod$ 断言新事实之前将我的插槽组合在一起