сумма значения из MySQL в PHP - PullRequest
1 голос
/ 18 января 2009

Кто-нибудь знает, как получить сумму числа?

Например, у меня есть пакет имен столбцов mysql.

Package
3
4
1
3
4

Если пакет 3, значение должно быть usd 5, если пакет 4, значение должно быть usd 10, если пакет 1, значение должно быть usd 1 и т. Д.

Таким образом, общее значение выше должно быть => 5 + 10 + 1 + 5 + 10 = 31

Так как мне получить сумму в php?

я пробовал array_sum .. но это дает мне ошибку, я не очень разбираюсь в php .. Пожалуйста, помогите мне

Заранее благодарен.

Ответы [ 3 ]

6 голосов
/ 18 января 2009

Получить базу данных для выполнения работы:

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'] ];
}
1 голос
/ 18 января 2009

Я думаю, что лучший способ сделать это в 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);

Имея весовые коэффициенты в базе данных, вы можете предоставить пользовательский интерфейс, позволяющий пользователям вашего приложения регулировать весовые коэффициенты.

1 голос
/ 18 января 2009

Вы можете сделать это в чистом 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++;
}

Предполагается, что ваша таблица базы данных называется «пакеты», а столбец с разными номерами пакетов называется «номер». В конце цикла у вас останется сумма в переменной $ sum. Не уверен, что это обязательно самый эффективный способ сделать это в PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...