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


при запросе COUNT из базы не приходит 0


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

#1 oknik

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

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

Отправлено 21 Май 2018 - 20:26

есть таб Контрагенты и в ней поле "Наличие документов" в котором хранится общее кол-во всех документов контрагента (договора, счета, акты):

в таб Договора, Счета и Акты есть вычисления которое срабатывает при сохранении, удалении, восстановлении записей.
данное вычисление увеличивает счетчик в таб Контрагенты, на котором висит вычисление (см. ниже)

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


//договора
$sqlQuery = "SELECT COUNT(*) as summa FROM ".DATA_TABLE."78 WHERE status=0 and f849='".$line['ID']."'";
$res = sql_query($sqlQuery);
$row = sql_fetch_assoc($res);
$summa1 = $row['summa'];

//счета
$sqlQuery = "SELECT COUNT(*) as summa FROM ".DATA_TABLE."43 WHERE status=0 and f839='".$line['ID']."'";
$res = sql_query($sqlQuery);
$row = sql_fetch_assoc($res);
$summa2 = $row['summa'];

//акты
$sqlQuery = "SELECT COUNT(*) as summa FROM ".DATA_TABLE."81 WHERE status=0 and f871='".$line['ID']."'";
$res = sql_query($sqlQuery);
$row = sql_fetch_assoc($res);
$summa3 = $row['summa'];
$line['Наличие документов']=$summa1+$summa2+$summa3;

и еще, если есть 3 документа, и например удалить один, то значение остается 3, когда удаляешшь еще один, становится 2 и т.д. т.е как будто бы вычисление срабатывает до того как по факту удаляются записи. такое возможно?

Сообщение отредактировал oknik: 21 Май 2018 - 20:54


#2 CbCoder

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

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

Отправлено 22 Май 2018 - 10:59

Цитата

т.е как будто бы вычисление срабатывает до того как по факту удаляются записи

Так и есть, событие на удаление вызывается до удаления, с той целью чтобы его можно было отменить. Просто учитывайте этот факт у себя в вычислении.

#3 oknik

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

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

Отправлено 22 Май 2018 - 14:19

Просмотр сообщенияCbCoder (22 Май 2018 - 10:59) писал:

Так и есть, событие на удаление вызывается до удаления, с той целью чтобы его можно было отменить. Просто учитывайте этот факт у себя в вычислении.

а как тогда правильно сделать?
вешать не на удаление а на изменение поля "статус"?

попробовал, но тоже самое.

Сообщение отредактировал oknik: 22 Май 2018 - 14:29


#4 CbCoder

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

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

Отправлено 22 Май 2018 - 17:32

Просмотр сообщенияoknik (22 Май 2018 - 14:19) писал:

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

Не считайте просто текущую в случае события на удаление. Событие проверяется через $event['type'], в случае удаления оно равно 'delete'.

#5 oknik

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

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

Отправлено 23 Май 2018 - 12:16

Просмотр сообщенияCbCoder (22 Май 2018 - 17:32) писал:

Не считайте просто текущую в случае события на удаление. Событие проверяется через $event['type'], в случае удаления оно равно 'delete'.
а где это писать?
вернее как сделать так что бы при sql запросе эту запись считать тоже?

- есть таб 1
- и есть таб 2,3,4
- в 2,3,4 надо что бы при удалении вызывалось вычисление в таб1 (которое как раз и делает sql запросы)
- в таб 1 для этого есть поле X которое при изменении вызывает это вычисление (sql запросы)
- в таб 2,3,4 есть вычисления которые при удалении меняют значение в поле X

вопрос:
где проверять событие $event['type']? и не понятно что это в итоге даст?

Сообщение отредактировал oknik: 23 Май 2018 - 12:23


#6 CbCoder

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

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

Отправлено 24 Май 2018 - 09:52

Слишком сложная схема у вас. Сделайте тогда 2 значения для поля X, в случае события удаления ставьте второе и проверяйте его в итоговом вычислении. Если второе - из общей суммы по запросам отнимаем единицу.





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

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