使用 cronJob 创建 PHP 记录数据库,并使用 SQL 通过每晚向右移动值来更新数据库

我在询问有关如何每午夜运行 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 的列并将其存储在变量中:

https://img1.sycdn.imooc.com/65a9dc8f00014bd606520078.jpg

然后,我希望它将数据库中一周的每个值存储在一个变量中。

https://img1.sycdn.imooc.com/65a9dc9c00010e2306490073.jpg

最后,通过将所有当前值向右移动来更新points_history

https://img1.sycdn.imooc.com/65a9dca900014a9906490087.jpg

并从另一个名为“points”的数据库获取名为“today_points”的列的值并将其放入“1d_before”中(因此,每个午夜,所有值都向右移动一位,而“todays point”现在是前一天)可以有人告诉我如何用 PHP 做到这一点。老实说,我已经尽了最大努力做了上面的片段。但这不起作用。任何人向我展示类似的代码将不胜感激。谢谢!



LEATH
浏览 80回答 1
1回答

慕盖茨4494581

您需要规范化表以将值存储在单独的行而不是列中。但是,如果您需要一个关于如何在现有结构中执行此操作的解决方案,那么这里是查询,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表中选择来更新第一天的值。这是工作小提琴
打开App,查看更多内容
随时随地看视频慕课网APP