Сообщение отредактировал f-jeka: 03 Июль 2015 - 10:31
1
Как в таблице вычислять сумму используя разные аргументы
Автор totalcolor, 16 февр. 2014 18:42
Сообщений в теме: 32
#21
Отправлено 03 Июль 2015 - 10:30
А как правильно сделать запрос?
#22
Отправлено 03 Июль 2015 - 12:14
Я же сказал - добавьте в запрос условие выборки по полю Тип. Запрос у вас уже есть, добавьте туда еще одно условие по полю.
#23
Отправлено 03 Июль 2015 - 12:41
$sqlQ = "SELECT SUM(`f812`) AS sum FROM ".DATA_TABLE."74 WHERE `f807`=".$line['Счет']['raw']." and `f5800`="Услуга" and status=0 and `id`<>".$ID;
Так правильно?
Так правильно?
#24
Отправлено 03 Июль 2015 - 12:54
Да, если f5800 - поле Тип. Только "Услуга" в данном случае должно быть в одинарных кавычках, чтобы не конфликтовать с двойными кавычками, в которые занесена вся строка запроса.
#25
Отправлено 11 Июль 2015 - 16:06
Спасибо.
Но что то с вычислением все равно не так. Установлено "Вычислять при условии" Отбражение поля Тип и изменении поля тип. Вычисляется правильно, но только если страничук 2 раза обносить. Если один раз обновляю, то вычисленеи не происходит. В чем может быть причина не вычисления с первого раза?
Но что то с вычислением все равно не так. Установлено "Вычислять при условии" Отбражение поля Тип и изменении поля тип. Вычисляется правильно, но только если страничук 2 раза обносить. Если один раз обновляю, то вычисленеи не происходит. В чем может быть причина не вычисления с первого раза?
#26
Отправлено 11 Июль 2015 - 18:42
Предыдущее вычисление делало очень не корректные расчеты.
Сделал в таком виде:
То есть перед тем как записать значение, сначала происходит обнуление предыдущего, а затем делается расчет суммы.
Остались две проблемы:
1. Вычисление срабатывает только при двойном обновлении страницы.
2. В сумму не попадает число из последней записи позиции счета.
Сделал в таком виде:
$sqlQ = "SELECT SUM(`f812`) AS sum FROM ".DATA_TABLE."74 WHERE `f807`=".$line['Счет']['raw']." and `f5800` = 'Услуга' and status=0 and `id`<>".$ID; $pre = sql_query($sqlQ) or die(mysql_error()); $row = sql_fetch_assoc($pre); $line['Счет']['Услуги'] = 0; $line['Счет']['Услуги'] = $row['sum']+$line['Счет']['Услуги'];
То есть перед тем как записать значение, сначала происходит обнуление предыдущего, а затем делается расчет суммы.
Остались две проблемы:
1. Вычисление срабатывает только при двойном обновлении страницы.
2. В сумму не попадает число из последней записи позиции счета.
#27
Отправлено 13 Июль 2015 - 09:24
А вы не обращали внимания на логику своего кода? Она, мягко сказать, странная. Сами посмотрите, что вы делаете:
Во-первых, зачем прибавлять $line['Счет']['Услуги'] к $row['sum'], если там все равно 0 (который вы сами же туда выше помещаете). Какой смысл прибавлять к чему-то явную пустоту? В чем тут логика? Не проще было бы тогда вообще не прибавлять ничего, чем зачем-то вначале это обнулять, а потом "прибавлять"?
Во-вторых, посмотрите еще раз на пример кода, который вы сами изначально размещали. Что прибавляется к $row['sum']? Явно ведь не $line['Счет']['Услуги'], которое прибавлять тут никакого смысла нет.
Совет: вы когда пишете код, обдумываете логичность того, что пишете. Это же определенный алгоритм, а не просто набор символов.
$line['Счет']['Услуги'] = 0; $line['Счет']['Услуги'] = $row['sum']+$line['Счет']['Услуги'];
Во-первых, зачем прибавлять $line['Счет']['Услуги'] к $row['sum'], если там все равно 0 (который вы сами же туда выше помещаете). Какой смысл прибавлять к чему-то явную пустоту? В чем тут логика? Не проще было бы тогда вообще не прибавлять ничего, чем зачем-то вначале это обнулять, а потом "прибавлять"?
Во-вторых, посмотрите еще раз на пример кода, который вы сами изначально размещали. Что прибавляется к $row['sum']? Явно ведь не $line['Счет']['Услуги'], которое прибавлять тут никакого смысла нет.
Совет: вы когда пишете код, обдумываете логичность того, что пишете. Это же определенный алгоритм, а не просто набор символов.
#28
Отправлено 13 Июль 2015 - 23:24
При таком варианте
1. Вычисление срабатывает только при двойном обновлении страницы.
2. В сумму не попадает число из последней записи позиции счета.
if ($row['sum']===NULL) { $line['Счет']['Услуги']=$line['Услуги']; } else { $line['Счет']['Услуги']=$row['sum']+$line['Услуги']; }проблемы те же самые:
1. Вычисление срабатывает только при двойном обновлении страницы.
2. В сумму не попадает число из последней записи позиции счета.
#29
Отправлено 14 Июль 2015 - 09:05
1. Значит с событиями намудрили. Вычисление настроено на событие изменения поля "Услуги"? Должны быть события изменения всех полей, задействованных в коде. События отображения лучше убрать.
2. Какое именно "число" должно попадать? Если из поля "Услуги", то все должно работать, в соответствии с вашим кодом. Или же причина в пункте 1.
2. Какое именно "число" должно попадать? Если из поля "Услуги", то все должно работать, в соответствии с вашим кодом. Или же причина в пункте 1.
#30
Отправлено 15 Июль 2015 - 00:31
Где то ошибка в логике, но не могу разобраться где.
Отключил событие отображения. Оставил только изменение полей Тип, Цена, Количество, Сумма.
Вычисление срабатывает следующим образом:
1. Присваиваю первой позиции статус Услуги. Ничего не происходит. В счете Услуги=0
2. Присваиваю второй позиции стстус Услуги. В счет записывается сумма от первой позиции.
3. Присваиваю третьей позиции статус Услуги. В счет записывается сумма первой и второй позиции.
То есть в сумму никогда не попадает та позиция, которой в данный момент присвоено значение Услуга. Попадают только предыдущие.
Если все таки включить вычисление по отображению, то после двойного обновления страницы сумма посчитается правильно, то есть просуммируется 1я, 2я и 3я позиция.
Но только если ни одна из них не является последней строчкой. Сумма в последней строчке игнорируется.
Может все таки sql запрос неправильный?
Отключил событие отображения. Оставил только изменение полей Тип, Цена, Количество, Сумма.
Вычисление срабатывает следующим образом:
1. Присваиваю первой позиции статус Услуги. Ничего не происходит. В счете Услуги=0
2. Присваиваю второй позиции стстус Услуги. В счет записывается сумма от первой позиции.
3. Присваиваю третьей позиции статус Услуги. В счет записывается сумма первой и второй позиции.
То есть в сумму никогда не попадает та позиция, которой в данный момент присвоено значение Услуга. Попадают только предыдущие.
Если все таки включить вычисление по отображению, то после двойного обновления страницы сумма посчитается правильно, то есть просуммируется 1я, 2я и 3я позиция.
Но только если ни одна из них не является последней строчкой. Сумма в последней строчке игнорируется.
Может все таки sql запрос неправильный?
Сообщение отредактировал f-jeka: 15 Июль 2015 - 00:35
#31
Отправлено 15 Июль 2015 - 09:10
Цитата
Может все таки sql запрос неправильный?
Как раз таки запрос полностью правильный, т.к. считает (исходя из ваших слов) именно так, как в нем указано. Не считается исключительно текущая сумма, но она и не должна считаться по запросу. Она должна браться (исходя из логики кода) из поля "Услуги". Так может поле указано не то?
#32
Отправлено 16 Июль 2015 - 00:15
Считается как раз совсем не так как в нем указано. Если бы считалось правильно, то после однократного обновления страницы должно срабатывать вычисление и суммировать все позиции где тип Услуга. На деле суммирует не все, а исключается последняя строчка, что совсем не верно. Плюс срабатывает только со второго раза. Пробовал отключать все другие вычисления, вдруг они мешают. Но результат такой же.
#33
Отправлено 16 Июль 2015 - 09:57
Так вы в запрос то посмотрите. Там в условии преднамеренно исключена текущая запись (`id`<>$ID), потому что сумма по текущей записи должна браться из $line. Или, по вашему, в чем тогда логика последующего за запросом кода, который прибавляет $line['Услуга'] к сумме, возвращенной запросом? Так что проблема точно не запросе, а в последующем за ним коде, и подозреваю что как раз в $line['Услуга'], в которой или пусто или не число или вообще такого поля нет. Потому и не учитывается в итоге сумма по текущей строке (или последней, в случае вычисления на отображение, которое завершается как раз на последней строке)
Количество пользователей, читающих эту тему: 11
0 пользователей, 11 гостей, 0 анонимных