繁体   English   中英

对于循环,该循环将递增并从上一行插入一个值

[英]For Loop that increments and inserts a value from the previous row

我试图将插入到MySQL表中的最后一个条目的值增加x%,然后将该值插入数据库,并一直持续到循环结束为止,从基值100开始。

假设我从第一行的$base_value值开始,我希望在一次迭代中将该值增加25%。 因此,在第二行中,我希望100增加25%。 在第三行中,第二行中的值增加了25%,依此类推,当循环达到100时,循环停止。该如何做?

$base_value = 100;
$increase_by; // x percent

for($i = 1; $i = 100; $i++)
{
    mysql_query("insert into table values(
       '',
       '$i',
       ''
    )");
}

像这样吗?

$base_value = 100;
$increase_by; // x percent

for($i = 1; $i <= 100; $i++)
{
    mysqli_query("insert into table values(
       '$base_value',
       '$i',
       ''
    )");
    $base_value = $base_value + ($base_value * $increase_by);
}

注意事项:

  • 我已将mysql_query替换为mysqli_query ,建议您也这样做。 PHP也建议这样做
  • 我将for循环中的终止条件从$i = 100更改$i <= 100 如果前者根本不起作用,我不确定会发生什么。 它在条件中设置 $i ,这首先是您永远不想做的事情。 但这也意味着它永远不会运行,或者将无限期运行,这取决于它如何将赋值语句解释为布尔值。 这些选项都不是理想的。
  • 此数学假定$increase_by是正确的小数位。 相反,如果您用“ 25”的实际值表示“ 25%”的概念,则必须调整数学以解决这一差异。
  • 否则,SQL查询本身将保持不变,因为我认为这是一个人为的示例。 但是以防万一,值得指出的是您还有第三个不必要的值,并且您的表名为table ,这可能是一个坏主意:)

只是为了好玩并假设第一行的值为零,另一种方法是使用uid作为主键的SQL查询。

$base_value = 100;
$factor = 1.25; // Take previous value and times it by 125%

// ...

mysqli_query(
"INSERT INTO table (my_value)
SELECT (my_value * $factor) AS my_value FROM table ORDER BY uid DESC LIMIT 1"
);

$base_value *= $factor;

// ...

但是,如果您有并发操作,并且没有进行测试,则不要指望此工作可靠地进行,我的蜘蛛意识是说,如果表为空,则在第一次迭代时会遇到障碍。 无论如何,请随时发表评论。 显然,@ David的解决方案更合理:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM