对于循环,递增并插入前一行的值

时间:2012-07-23 01:17:32

标签: php mysql for-loop percentage

我试图通过x%增加插入MySQL表的最后一个条目的值,然后将该值插入数据库并继续直到循环结束,从基值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',
       ''
    )");
}

2 个答案:

答案 0 :(得分:1)

这样的东西?:

$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 also suggests this
  • 我将for循环中的终止条件从$i = 100更改为$i <= 100。如果前者甚至可以工作,我不确定这种行为会是什么。它是条件中的设置 $i,首先是你永远想要做的事情。但这也意味着要么它永远不会运行,要么它将无限期地运行,这取决于它如何将赋值语句解释为布尔值。这些选项都不可取。
  • 此数学假设$increase_by具有正确的小数位数。如果你代表“25%”的概念,实际值为“25”,那么你将不得不调整数学来解释这种差异。
  • SQL查询本身没有动过,因为我认为这是一个人为的例子。但是,如果值得指出你有第三个不必要的值并且你的表名为table,这可能是一个坏主意:)

答案 1 :(得分:0)

只是为了有趣并且第一行的假设值为零,另一种选择是使用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的解决方案更合理:)