Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

Как посчитать сумму одного столбца таблицы по определенному критерию?

#1 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
0

Отправлено 14 Сентябрь 2009 - 11:33

как посчитать сумму одного столбца таблицы по двум критериям?
$master = "SELECT * FROM master ORDER BY id";
$master_query = mysql_query("$master");
while ($master_select = mysql_fetch_assoc($master_query))
{
echo $master_select['name'];
$summa = "SELECT * FROM visit WHERE date= '".$day."' AND id_master= '".$master_select['id']."'";

$summa_query = mysql_query("$summa ");
while ($summa_select = mysql_fetch_assoc($summa_query))
{
$s += $summa_select['summa'];
echo $s;
}

}
}


вот так он выдает всю прогрессию суммы, а мне надо конечную цифру

 

 

  • 0

#2 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 14 Сентябрь 2009 - 12:07

вот так он выдает всю прогрессию суммы, а мне надо конечную цифру

sc2r2bey,
не пробовали вынести echo за цикл?
			while ($summa_select = mysql_fetch_assoc($summa_query))
{
$s += $summa_select['summa'];
}
echo $s;

  • 0

#3 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 14 Сентябрь 2009 - 12:16

выносил он тогда одну и ту же сумму всем добавляет
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 14 Сентябрь 2009 - 16:57

sc2r2bey,
А не пробовал воспользоваться стандартами MySQL
$master = "SELECT * FROM master ORDER BY id";
$master_query = mysql_query($master);
while ($master_select = mysql_fetch_assoc($master_query))
{
echo $master_select['name'];
$summa = "SELECT SUM(summa) as all_summa FROM visit WHERE date='{$day}' AND id_master={$master_select['id']}";
$summa_query = mysql_query($summa);
if(mysql_num_rows($summa_query) == 1)
{
$summa_select = mysql_fetch_assoc($summa_query);
echo "Количество визитов: {$summa_select['all_summa']}<br><br>";
} else {
$echo "Некорректная сумма.<br><br>";
}
}

В твоём примере ужас написан... Сам подумай, во первых у тебя нигде не задана переменная $s, к чему же будет прибавляться суммирование? В худшем случае к ничему иному как null, которое имеет случайное значение. В лучшем к нулю. Но это дело так же не меняет. У тебя после внутреннего обхода цикла переменная $s нигде не обнуляется, поэтому у тебя так и будет плюсоваться плюсоваться всё в неё...
.
А вообще подобные таблицы визитов имеют очень большую нагрузку...
  • 0

#5 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 14 Сентябрь 2009 - 21:33

а что такое стандарты mysql?
я знаю, что подобная вещь реализуется через join но я в этом ни бум бум
  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 14 Сентябрь 2009 - 21:35

sc2r2bey, я имел ввиду что есть в стандартном синтаксисе MySQL. Там есть функция SUM. Я написал код, должен быть рабочий.
  • 0

#7 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 14 Сентябрь 2009 - 21:50

да вроде работает, теперь хочу оптимизировать его :)

попробую снова задачу поставить, есть таблица master в ней 2 поля id и name, т.е идентификатор и имя мастреа, есть 2-я таблица visit в ней много полей в частность id_master, summa и date соотетсвтенно идентификатор мастера, некое число и дата посещения, как сделать, чтоб отобразить всех мастеров по порядку, плюс рядом общую сумму чисел, которые были записаны в определенную дату?
  • 0

#8 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 14 Сентябрь 2009 - 22:26

sc2r2bey,
$sql = "SELECT *,SUM(summa) as all_summa FROM master LEFT JOIN visit ON master.id=id_master WHERE date='{$day}' ORDER BY id";
$query = mysql_query($sql);
if(mysql_num_rows($query) > 0)
{
while ($array = mysql_fetch_assoc($query))
echo "Имя: {$array['name']}<br>Сумма: {$array['all_summa']}<br><br>";
}

  • 0

#9 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 15 Сентябрь 2009 - 09:03

не работает
  • 0

#10 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 15 Сентябрь 2009 - 10:26

sc2r2bey, Проверял у себя, у меня всё работало, покажите в каком формате у вас дата, да и вообще структуру полей скрином выложите. Потому что у меня всё работало...
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru