Суммирование переменной внутри цикла.

Статус
В этой теме нельзя размещать новые ответы.

JohnB

Новичок
В том то и дело что давно. но вот один момент я так и не могу понять. Реализовал уже много успешных проектов внутри компаний. Но так и не пойму как внутри цикла сложить значение переменной. :((
 

phpdev2007

Новичок
JohnB
Ты конечно извени ну пример мой выше видел? и по нему не видно как сделать?
А где данные чтоб вести в твои таблицы, где сам запрос который не работает?

-~{}~ 27.11.07 13:26:

Автор оригинала: JohnB
Реализовал уже много успешных проектов внутри компаний. Но так и не пойму как внутри цикла сложить значение переменной. :((
Ты шутишь да? как не знаеш как сложить? зачем тогда тебе бд. пиши пример цикла! рассмотрим :)
 

Фанат

oncle terrible
Команда форума
JohnB
мля.
ты такой-то непонятливый.
во-первых, ЦИКЛЫ И ПЕРЕМЕННЫЕ не имеют к базам данных отношения. НИКАКОГО.
Позже мы с тобой займеся циклами, и обязательно с ними разберемся.

Однако сейчас ты должен напрячь весь свой интеллект и понять, что НИКАКИХ ЦИКЛОВ у тебя не будет.
Ты получишь из базы одну строку с двумя суммами.

после того, как ты освоишься с этим фактом, и перестанешь лепетать про массивы, мы перейдем, наконец, к решению задачи средствами mysql
После того, как ты её опишешь

-~{}~ 27.11.07 13:28:

phpdev2007
это после. пусть сначала сделает по-человечески, а потом будет восполнять пробелы в пхп.
порядок может быть только такой, иначе так и останется неучем
 

JohnB

Новичок
//шапка таблицы


print "<table border='1' style=\"border: 1px solid #000000\" cellpadding='1' cellspacing='0'>
<tr align='center' class='text' style=\"font-weight: 300\"><td>&nbsp;</td><td colspan='3'>Всего заявок</td><td colspan='3'>Выполнено заявок</td><td colspan='3'>Повторно открыто заявок</td><td colspan='3'>Среднее время реакции</td><td colspan='3'>Плановые показатели время реакции</td><td>Затраты часов</td><td>Стоимость задачи </td> <td> Распределение времени </td>
<tr class='text' align='center'><td align=right>Приоритет: </td><td>0</td><td>1</td><td>2</td></tr>


<tr class='text'><td colspan='19'><b> Тип оборудования: </b> </td></tr>";

запрос на столбец оборудования

$result_class = mysql_query("SELECT class FROM oborud Group by class Order by class asc");

while ($q7 = mysql_fetch_array($result_class))
{

// В нем запрос который я описывал в самом начале. Он выбирает время по заявкам в зависимости от оборудования.

$result_time_n = mysql_query("SELECT sum(zaya.date_send), sum(sib_sum.date_complite) FROM zaya, sib_oborud, sib_sum where zaya.id=sib_sum.id_zay and zaya.id=sib_oborud.id and zaya.status='7' and sib_oborud.type='$q7[class]' and zaya.sroch='2' group by sib_oborud.id");

while ($time = mysql_fetch_row($result_time_n))
{

$razn = $time['1']-$time['0'];

// print "$razn<br>";

Получается переменная $razn содержит разные значения.
Нужно их суммировать по каждому типу оборудования.

}

далее выводится результат в ячейки.



}

-~{}~ 27.11.07 13:36:

Сейчас все напишу по порядку фанат.

-~{}~ 27.11.07 13:42:

1. Вот sql запрос.

SELECT date_send FROM zaya, sib_oborud
where zaya.id=sib_oborud.id and sib_oborud.type='Весы' and zaya.status='7' AND zaya.sroch='2' group by sib_oborud.id

Выводит мне столбец date_send (12 records)


1193805076
1193901961
1193916489
1193988447
1194001401
1194001816
1194172081
1194323378
1194332606
1194420931
1194520575
1194871515


Нужно суммировать.. ПРодолжение следует.

-~{}~ 27.11.07 13:48:

date_send - поле таблицы zaya

переписываю запрос добавляя sum к полю date_send

SELECT sum(date_send) FROM zaya, sib_oborud
where zaya.id=sib_oborud.id and sib_oborud.type='Весы' and zaya.status='7' AND zaya.sroch='2' group by sib_oborud.id


получаю.

1193805076
1193901961
1193916489
1193988447
1194001401
1194001816
2388344162
1194323378
1194332606
1194420931
1194520575
1194871515
 

phpdev2007

Новичок
Прежде чем выводить таблицу или ее части сформируй такой массив данных которые тебе нужен для ее вывода.
 

JohnB

Новичок
Пока отвлеклись от таблиц. Меня интересует запрос. А точнее как сказал фанат, строка, которую я получу из базы.

Почему второй запрос не возвращает мне результат суммирования строк?

-~{}~ 27.11.07 13:54:

да, суммирую даты.

Вообще цель вот какая.

Мне надо выяснить среднее время реакции тех отдела на заявку в соответствии с типом оборудования.

Для этого = Время выполнения заявки от подачи до закрытия / общее количество выполненых заявок.

т.е. чтобы мне получить числитель, мне надо суммировать время (разницу по всем закрытым заявкам да и еще по каждому типу оборудования)
 

fixxxer

К.О.
Партнер клуба
у него два юникстайма - начало операции, конец операции
и товары
для товара может быть несколько записей
ему надо среднее время выполнения операции(вроде)
так что вообще это тоже нормальный вариант, агрегаткой суммировать обе даты и потом вычесть одно из другого и поделить на count
если я конечно все понял правильно
ну или если надо суммарное то не делить)

-~{}~ 27.11.07 13:56:

а вообще есть avg() ;)
 

Фанат

oncle terrible
Команда форума
блин.
я фигею.
во-первых, для получения среднего существует функйия avg(). Неожиданное название, правда?
во-вторых, удивительно, что что ты написал цель ТОЛЬКО СЕЙЧАС. Вообще нет. Удивительно то, что ты её вообще написал!
в-третьих, если тебе нужно среднее время по типам, то и запрос у тебя должен возвращать не ДВЕ СУММЫ, а ЧИСЛО и ТИП.
среднее время и тип, к которому оно относится.

принцип у базы данных, понимаешь, такой. она должна возвращать то, что тебе нужно!
 

JohnB

Новичок
у него два юникстайма - начало операции, конец операции
и товары (только не товары а оборудование, которое участвовало в заявке)

fixxxer,
суммировать обе даты и потом вычесть одно из другого и поделить на count


истина!!!
И надо сделать это по каждому типу оборудования.!

-~{}~ 27.11.07 14:01:

фанат, мне надо не среднее время а СУММУ секунд, которое есть во всех закрытых заявках где указан тип оборудования допустим ВЕСЫ.


Так понятно?*

-~{}~ 27.11.07 14:03:

она должна возвращать то, что тебе нужно!

Это понятно.
 

Фанат

oncle terrible
Команда форума
для товара может быть несколько записей
а. это усложняет дело.

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

JohnB
вторая дата в каком поле лежит? надеюсь, хоть в одной и тоу же таблице?
тебе надо запрос, в котором будет avg(дата1-дата2).

-~{}~ 27.11.07 14:05:

Мне надо выяснить среднее время реакции
мне надо не среднее время а СУММУ секунд
твоюмать. ты можешь определиться?
 

fixxxer

К.О.
Партнер клуба
так я не понял, агрегация по товару или по типу?

-~{}~ 27.11.07 14:06:

JohnB
объясни на пальцах, вобщем. пример нарисуй. а то всех запутал уже
 

Фанат

oncle terrible
Команда форума
fixxxer
я так понимаю, что по типу, а товары группируются в типы.
то есть, для упрощения стоит сначала делать по товарам, а потом уже с типами.
 

fixxxer

К.О.
Партнер клуба
то есть надо узнать среднее (или какое там мля) время и по типам и еще и по товарам? или как?
 

Фанат

oncle terrible
Команда форума
нет, вроде, только по типам.
для чего группировать все товары одного типа.

но я бы сейчас не занимался группировукой по типам, а решил задачу для товаров.
 

JohnB

Новичок
Да я же уже почти исходник выложил. а там все просто.

Алгоритм могу описать.
Подается заявка. время пишется в zaya (date_send)

Когда подается заявка диспетчер регистрирует ее указав тип оборудования.
Соответвенно в таблицу zaya пишется заявка в таблицу sib_oborud пишется оборудование (id, type, marka, ser). id таблицы sib_oborud == id заявки из таблицы zaya чтобы сделать привязку этого оборудования к конкретной заявке .

В заявке есть задачи внутри. Это отдельная таблица sib_sum
В ней много полей. но нам нужно только время выполнения date_complite

дак вот если взглянуть на запрос. то все мне кажется яссно.
откуда берутся какие переменные.

SELECT date_send FROM zaya, sib_oborud
where zaya.id=sib_oborud.id and sib_oborud.type='Весы' and zaya.status='7' AND zaya.sroch='2' group by sib_oborud.id
 

fixxxer

К.О.
Партнер клуба
так если по типу то нахрена вообще товары? просто список получить чтоли? group_concat тогда в руки. хотя это сложно сразу, да, тут сначала бы с группировкой и агрегатками разобраться :)

-~{}~ 27.11.07 14:16:

ЧТО УЗНАТЬ ТО НАДО МЛЯХА? :)))
 

JohnB

Новичок
это если брать только date_send а если 2 даты подачи и выполнения то

SELECT zaya.date_send, sib_sum.date_complite FROM zaya, sib_sum, sib_oborud where zaya.id=sib_sum.id_zay and zaya.id=sib_oborud.id and zaya.status='7' and sib_oborud.type='Весы' and zaya.sroch='2' group by sib_oborud.id

-~{}~ 27.11.07 14:20:

Узнать надо Среднее время реакции на заявку

Вот таблица нужно заполнить ячейки

----------------------------------------------------------------------------
Типы оборудования | Среднее время реакции на заявку

-----------------------------------------------------------------------------

Весы | x |
Касса | x |
Принтер | x |
Модем | x |
Сканер | x |
 

Фанат

oncle terrible
Команда форума
записей в sib_sum может быть больше, чем в zaya (блин, ну и названия)?
а почему?
если больше, то какую из дат завершения брать?
если столько же, то нафига вообще этот сум - почему нельзя писать все в заю?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху