0

MySQL テーブルに挿入された最後のエントリの値を x% 増やしてから、その値をデータベースに挿入し、基本値 100 からループが終了するまで続けます。

行番号 1 の 100の a から始めて$base_value、反復でその値を 25% 増やしたいとします。したがって、行番号 2 では、100 を 25% 増やしたいと思います。行番号 3 では、行番号 2 の値が 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 クエリ自体は手を加えていません。これは不自然な例だと思います。しかし、3 番目の不要な値があり、テーブルの名前が であることを指摘する価値がある場合に備えて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 に答える