Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用cronJob和SQL为记录创建一个PHP数据库,通过每晚向右移动值来更新数据库_Php_Mysql_Sql_Row - Fatal编程技术网

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

使用cronJob和SQL为记录创建一个PHP数据库,通过每晚向右移动值来更新数据库,php,mysql,sql,row,Php,Mysql,Sql,Row,我正在尝试运行CronJob PHP脚本,之前我问了一个关于如何在每个午夜运行PHP脚本的问题。从那以后,我一直被一个看似微不足道的问题难住了。我读过几篇关于从数据库获取行、回显值等的文章,并一直在实现代码。但似乎它们不适合运行php文件。这是代码 <?php $connection = mysqli_connect('localhost', 'root', '', 'pointsmanager'); $before0d = "SELECT * FROM points WHERE

我正在尝试运行CronJob PHP脚本,之前我问了一个关于如何在每个午夜运行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”中(因此每到午夜,所有的值都会向右移动一个,“todays points”现在是前一天),有人能告诉我如何在PHP中执行此操作吗。我真的尽了最大的努力,完成了上面的片段。但它不起作用。任何给我看类似代码的人都将不胜感激。谢谢

正如达曼所说,您需要规范化表,将值存储在单独的行而不是列中。但是,如果您需要一个在现有结构中如何实现这一点的解决方案,那么下面是查询

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\u points
表中选择它来更新第一天的值


正如达曼所说,这就是工作原理,您需要规范化您的表,以便将值存储在单独的行而不是列中。但是,如果您需要一个在现有结构中如何实现这一点的解决方案,那么下面是查询

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\u points
表中选择它来更新第一天的值


以下是您需要了解的DB规范化工作。如果列名中有数字,则表明您的架构未规范化。您需要了解DB规范化。如果列名中有数字,则表明您的架构未规范化。什么是用户id?数据是如何存储的?是否有任何ID或两个表
点\u历史记录
只有一行?两个表上都有一行。它可能会改变,如果只有一排的话。然后从查询中删除
WHERE
子句。我知道这是一个愚蠢的问题,但这是一个sql文件,对吗?什么是用户id?数据是如何存储的?是否有任何ID或两个表
点\u历史记录
只有一行?两个表上都有一行。它可能会改变,如果只有一排的话。然后从查询中删除
WHERE
子句。我知道这是一个愚蠢的问题,但这是一个sql文件,对吗?