1

数値の合計を取得する方法を知っている人はいますか?

たとえば、mysql 列名パッケージがあります。

Package
3
4
1
3
4

パッケージ 3 の場合、値は 5 米ドル、パッケージ 4 の場合、値は 10 米ドル、パッケージ 1 の場合、値は 1 米ドル、などとなります。

したがって、上記の合計値は => 5 + 10 + 1 + 5 + 10 = 31 になります。

では、phpで合計を取得するにはどうすればよいですか?

私はarray_sumを試しました..しかし、それは私にエラーを与えます.私はphpの専門家ではありません..私を助けてください

事前に感謝します。

4

3 に答える 3

6

作業を行うデータベースを取得します。

select sum(CASE WHEN package = 3 THEN 5 ELSE 0 END)
       + sum(CASE WHEN package = 4 THEN 10 ELSE 0 END)
       + sum(CASE WHEN package = 1 THEN 1 ELSE 0 END) AS total
from table_name

それを行う正しい方法は、いくつかの値を持っている場合、次のように金額フィールドを含むようにテーブルを変更することです。

select sum(amount) from table_name

または、値(パッケージ、量)間の関係を含む別のテーブルを用意してから、

select sum(package_amount) 
from table_name, lookup_values
where table_name.package = lookup_values.package

または、本当に PHP で実行したい場合は、次のようにします。

$amount = array(3=>5, 4=>10, 1=>1);  // define the amount of each value
$result = mysql_query("SELECT id FROM table_name");
$sum = 0;

while ($row = mysql_fetch_assoc($result))
{
    $sum += $amount[ $row['id'] ];
}
于 2009-01-18T09:05:15.127 に答える
1

Richard のように純粋な SQL で実行できます。PHP のバージョンは次のようになります。

$result = mysql_query("SELECT `number` FROM `packages`");

while ($row = mysql_fetch_assoc($result))
{
    $curr = $row['number'];
    if ($curr == 3) $sum += 3;
    if ($curr == 4) $sum += 10;
    if ($curr == 1) $sum++;
}

これは、データベース テーブルの名前が「packages」で、異なるパッケージ番号を持つ列が「number」と呼ばれていると仮定しています。ループの最後に、$sum 変数に合計が残ります。これが必ずしも PHP でこれを行う最も効率的な方法であるかどうかはわかりません。

于 2009-01-18T09:15:14.873 に答える
1

PHP でこれを行うより適切な方法は、重みの連想配列を宣言することだと思います。これにより、データがアルゴリズムから分離されます。

$weight=array(
  1=>1,
  3=>3,
  4=>10
);

$result = mysql_query("SELECT `number` FROM `packages`");

$sum=0;
while ($row = mysql_fetch_assoc($result))
{
    $n = $row['number'];
    if (isset($weight[$n])) 
    {
         $sum+=$weight[$n];
    }
    else
    {
          #handle error somehow, maybe with a default weight
          die("Unexpected value $n");
     }
}

より良い代替手段は、これを完全にデータ駆動型にし、重みをテーブルに入れることです

#create and populate the weights table
create table weight (number int, weight int, primary key(number));
insert into weight (number,weight) values (1,1),(3,3),(4,10);

#figure out total weight
select sum(weight) from package inner join weight using(number);

データベース内の重みを使用して、アプリケーションのユーザーが重みを調整できるようにする UI を提供できます。

于 2009-01-18T10:30:18.167 に答える