我试图通过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',
''
)");
}
答案 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”,那么你将不得不调整数学来解释这种差异。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的解决方案更合理:)