循环遍历数据库并使用foreach循环更新字段


Loop through database and update a field with a foreach loop

我正试图从表中四舍五入小数,并更新同一表中的另一个字段与新的四舍五入值,但我似乎无法破解它。

舍入脚本工作完美,但我卡住了试图运行舍入脚本并相应地更新数据库。

表包含超过10,000个条目,因此我只请求特定给定日期的数据,这一次将范围缩小到约1,200个条目…

这是我的foreach循环(它自己工作得很好),但这不起作用:

<?php
include("XXXX");
$cxn = mysqli_connect($host,$user,$password,$dbname)
    or die ("Couldn't connect to server.");
$query = "SELECT `sub_hrs`, `id` FROM `attend` WHERE `date` = '$date'";
$result = mysqli_query($cxn,$query)
    or die ("Couldn't execute query.");
while($row = mysqli_fetch_assoc($result))
{
    extract($row);  
    $n = array($sub_hrs);
    foreach($n as $i) {
        $new[] = (fmod($i, 1) > 0.5 
                ? sprintf("%2.f", (float) (int) $i + 0.5) 
                : sprintf("%2.f", (float) (int) $i)) . PHP_EOL; 
        $mysql_query("UPDATE `attend` SET `total_hrs` = $new WHERE `id` = $id");
        }
}

你在下面的行中分配了一个数组$new[]。

  $new[] = (fmod($i, 1) > 0.5 
            ? sprintf("%2.f", (float) (int) $i + 0.5) 
            : sprintf("%2.f", (float) (int) $i)) . PHP_EOL; 

但是在query中,你只传递了$new变量,这将不起作用,因为你不会在$new变量中得到任何值。

    $mysql_query("UPDATE `attend` SET `total_hrs` = $new WHERE `id` = $id");

感谢所有的帮助家伙,但我发现,一个简单的查询技巧…

UPDATE `attend`
            SET `total_hrs` = if((`sub_hrs` - truncate(`sub_hrs`,0)) < 0.5, truncate(`sub_hrs`,0), ((truncate(`sub_hrs`,0)) + 0.5))
            WHERE `date` = '$date'