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


Как в таблице вычислять сумму используя разные аргументы


Сообщений в теме: 32

#21 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 03 Июль 2015 - 10:30

А как правильно сделать запрос?

Сообщение отредактировал f-jeka: 03 Июль 2015 - 10:31


#22 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 03 Июль 2015 - 12:14

Я же сказал - добавьте в запрос условие выборки по полю Тип. Запрос у вас уже есть, добавьте туда еще одно условие по полю.

#23 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 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 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 03 Июль 2015 - 12:54

Да, если f5800 - поле Тип. Только "Услуга" в данном случае должно быть в одинарных кавычках, чтобы не конфликтовать с двойными кавычками, в которые занесена вся строка запроса.

#25 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 11 Июль 2015 - 16:06

Спасибо.
Но что то с вычислением все равно не так. Установлено "Вычислять при условии" Отбражение поля Тип и изменении поля тип. Вычисляется правильно, но только если страничук 2 раза обносить. Если один раз обновляю, то вычисленеи не происходит. В чем может быть причина не вычисления с первого раза?

#26 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 11 Июль 2015 - 18:42

Предыдущее вычисление делало очень не корректные расчеты.
Сделал в таком виде:
$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 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 13 Июль 2015 - 09:24

А вы не обращали внимания на логику своего кода? Она, мягко сказать, странная. Сами посмотрите, что вы делаете:

$line['Счет']['Услуги'] = 0;
$line['Счет']['Услуги'] = $row['sum']+$line['Счет']['Услуги'];

Во-первых, зачем прибавлять $line['Счет']['Услуги'] к $row['sum'], если там все равно 0 (который вы сами же туда выше помещаете). Какой смысл прибавлять к чему-то явную пустоту? В чем тут логика? Не проще было бы тогда вообще не прибавлять ничего, чем зачем-то вначале это обнулять, а потом "прибавлять"?

Во-вторых, посмотрите еще раз на пример кода, который вы сами изначально размещали. Что прибавляется к $row['sum']? Явно ведь не $line['Счет']['Услуги'], которое прибавлять тут никакого смысла нет.

Совет: вы когда пишете код, обдумываете логичность того, что пишете. Это же определенный алгоритм, а не просто набор символов.

#28 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 13 Июль 2015 - 23:24

При таком варианте
if ($row['sum']===NULL)
   {
		 $line['Счет']['Услуги']=$line['Услуги'];
   }
   else
   {
		 $line['Счет']['Услуги']=$row['sum']+$line['Услуги'];
   }
проблемы те же самые:
1. Вычисление срабатывает только при двойном обновлении страницы.
2. В сумму не попадает число из последней записи позиции счета.

#29 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 14 Июль 2015 - 09:05

1. Значит с событиями намудрили. Вычисление настроено на событие изменения поля "Услуги"? Должны быть события изменения всех полей, задействованных в коде. События отображения лучше убрать.
2. Какое именно "число" должно попадать? Если из поля "Услуги", то все должно работать, в соответствии с вашим кодом. Или же причина в пункте 1.

#30 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 15 Июль 2015 - 00:31

Где то ошибка в логике, но не могу разобраться где.
Отключил событие отображения. Оставил только изменение полей Тип, Цена, Количество, Сумма.
Вычисление срабатывает следующим образом:
1. Присваиваю первой позиции статус Услуги. Ничего не происходит. В счете Услуги=0
2. Присваиваю второй позиции стстус Услуги. В счет записывается сумма от первой позиции.
3. Присваиваю третьей позиции статус Услуги. В счет записывается сумма первой и второй позиции.
То есть в сумму никогда не попадает та позиция, которой в данный момент присвоено значение Услуга. Попадают только предыдущие.

Если все таки включить вычисление по отображению, то после двойного обновления страницы сумма посчитается правильно, то есть просуммируется 1я, 2я и 3я позиция.
Но только если ни одна из них не является последней строчкой. Сумма в последней строчке игнорируется.

Может все таки sql запрос неправильный?

Сообщение отредактировал f-jeka: 15 Июль 2015 - 00:35


#31 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 15 Июль 2015 - 09:10

Цитата

Может все таки sql запрос неправильный?

Как раз таки запрос полностью правильный, т.к. считает (исходя из ваших слов) именно так, как в нем указано. Не считается исключительно текущая сумма, но она и не должна считаться по запросу. Она должна браться (исходя из логики кода) из поля "Услуги". Так может поле указано не то?

#32 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 16 Июль 2015 - 00:15

Считается как раз совсем не так как в нем указано. Если бы считалось правильно, то после однократного обновления страницы должно срабатывать вычисление и суммировать все позиции где тип Услуга. На деле суммирует не все, а исключается последняя строчка, что совсем не верно. Плюс срабатывает только со второго раза. Пробовал отключать все другие вычисления, вдруг они мешают. Но результат такой же.

#33 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 16 Июль 2015 - 09:57

Так вы в запрос то посмотрите. Там в условии преднамеренно исключена текущая запись (`id`<>$ID), потому что сумма по текущей записи должна браться из $line. Или, по вашему, в чем тогда логика последующего за запросом кода, который прибавляет $line['Услуга'] к сумме, возвращенной запросом? Так что проблема точно не запросе, а в последующем за ним коде, и подозреваю что как раз в $line['Услуга'], в которой или пусто или не число или вообще такого поля нет. Потому и не учитывается в итоге сумма по текущей строке (или последней, в случае вычисления на отображение, которое завершается как раз на последней строке)





Количество пользователей, читающих эту тему: 11

0 пользователей, 11 гостей, 0 анонимных