【问题标题】:For Loop that increments and inserts a value from the previous rowFor 循环,从前一行递增并插入一个值
【发布时间】:2012-07-23 01:17:32
【问题描述】:

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

假设我从第一行的 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',
       ''
    )");
}

【问题讨论】:

  • 首先,除非 PHP 做了一些奇怪的事情,否则你的 for 循环条件似乎是错误的。第二个语句可能应该是$i <= 100,否则我认为循环根本不会运行,因为条件一开始会是假的。
  • 您可以在纯 SQL 中执行此操作。只需执行SELECT 即可获取最后一行,检索您想要的值,计算 +25% (value/100*25),然后为您的 INSERT 使用新值。
  • @David - 它看起来更像infinite loop
  • 数据库中第一行的值为 100 ?还是 PHP 中的 $base_value 在您开始循环时设置为 100 ?
  • @David 这将是一个无限循环,因为它会反复将 $i 设置为 100。如果他写了$i == 100,它确实永远不会运行。

标签: php mysql for-loop percentage


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

【讨论】:

    【解决方案2】:

    为了好玩,假设第一行的值为零,另一种选择是这个以 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 的解决方案更合理:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 2015-03-04
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      相关资源
      最近更新 更多