php mysql den toplam değeri

3 Cevap php

Herkes sayının toplamını almak için nasıl bilir?

Örneğin i mysql sütun adı paketi var.

Package
3
4
1
3
4

Paketi 3 Eğer paket 4, değer usd 10 olmalıdır eğer paketi 1, değer vb usd 1 ve olmalıdır eğer, değer, usd 5 olmalıdır.

Yani yukarıdaki toplam değeri => 5 + 10 + 1 + 5 + 10 = 31 olmalı

Peki nasıl ben php bunun toplamı alabilirim?

i array_sum denedim .. ama bana hata, php im değil çok uzman verir .. bana yardımcı olun

Önceden teşekkür.

3 Cevap

Veritabanı işi yapmak olsun:

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

Birkaç değerlerden daha var eğer bunu yapmanın doğru yolu, miktar alanını içeren tabloyu değiştirmek olacak böylece yapabilirsiniz:

select sum(amount) from table_name

Alternatif değerleri (paket, tutar) arasındaki ilişkiyi bulunan bir başka tablo var, ve daha sonra yapılacak

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

Yoksa, gerçekten PHP bunu yapmak istiyorsanız:

$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'] ];
}

Richard yaptığı gibi tamamen SQL bunu yapabilir, PHP sürümü gibi bir şey olurdu:

$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++;
}

Bu veritabanı tablo 'paketler' adlı üstleniyor ve farklı paket numaraları vardır sütun 'numarası' denir. Döngünün sonunda $ toplam değişkeninde toplamı ile kalacak. Bu mutlaka PHP bunu yapmak için en etkili yolu ise emin değil.

PHP bunu yapmak için bir kıvrımlara yol ağırlıkları bir ilişkisel dizi bildirmek için olacağını düşünüyorum, bu algoritma ile veriyi ayırır:

$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");
     }
}

Bir iyi bir alternatif bu tamamen veri odaklı yapmak olabilir ve bir tabloda ağırlık vereceğini

#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);

Veritabanında ağırlıkları ile, ağırlıkları ayarlamak için uygulamanızın kullanıcılarına alloww bir UI sağlayabilir.