0

我正在尝试创建一个升级脚本,但某处似乎是一个错误,导致 while 循环永无止境。

我想要做的是使用升级代码的结果设置一个数据库字段。因此我有 2 个 while 循环。第一个循环是遍历所有 user_id,第二个 while 循环是计算每个用户填写的所有配置文件字段的百分比。

我想这是一个逻辑错误,因为如果我通过提供确切的 user_id 在没有第一个 while 循环的情况下运行升级代码,它工作正常。或者可能是问题,一些user_id不再存在?

请看一下代码:

$count_userid = 1;

       while($count_userid < 10000)
        {  

    // profile percentage

              $resultpercentage = mysql_query("SELECT profilevalue_1, profilevalue_2, profilevalue_3 FROM table_profilevalues WHERE profilevalue_user_id = '$count_userid' LIMIT 1");

            while ($row = mysql_fetch_row($resultpercentage)) {
              $empty_count = 0;
              $count = count($row);
              for ($i = 0; $i < $count; $i++)
                if ($row[$i] === '' || $row[$i] === '-1' || $row[$i] === 'NULL')
                  $empty_count++;
              $profile_percent_user = ((int) (100 * (1 - $empty_count / ($count - 1))));


              // SAVE PROFILE PERCENTAGE
              $profile_percentage_query = "UPDATE table_users SET user_profilepercentage='$profile_percent_user' WHERE user_id='$count_userid' LIMIT 1";
              $database->database_query($profile_percentage_query);
            } 

          $count_userid++;
        }

有人在这里看到问题吗?

此致

4

1 回答 1

0

一方面,由于 SQL 查询中的“LIMIT 1”,$resultpercentage 将包含 1 个值,对吗?那么下面的while循环是什么循环呢?并且以下计数将永远是 1,这否定了它之后的 for 循环。

tl; dr:删除“LIMIT 1”,以便您可以遍历所有结果。

于 2012-12-03T17:54:27.950 回答