0

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

假设我从第一$base_value行的 100 开始,我想在迭代中将该值增加 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',
       ''
    )");
}
4

2 回答 2

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_querymysqli_query,我建议您也这样做。 PHP 也建议这样做
  • for我将循环中的终止条件从$i = 100更改为$i <= 100. 如果前者甚至完全起作用,我不确定会是什么行为。它设置 $i在条件中,首先是你永远不想做的事情。但这也意味着它要么永远不会运行,要么会无限期地运行,这取决于它将赋值语句解释为布尔值的方式。这些选项都不是可取的。
  • 这个数学假设$increase_by是正确的小数位。相反,如果您用“25”的实际值来表示“25%”的概念,那么您将不得不调整数学以解释这种差异。
  • SQL 查询本身没有受到影响,因为我认为这是一个人为的例子。但是以防万一值得指出您有第三个不必要的值并且您的表被命名table,这可能是一个坏主意:)
于 2012-07-23T01:30:15.403 回答
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 的解决方案更合理:)

于 2012-07-23T01:59:53.647 回答