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


Сумма значений в подчиненной


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

#1 ber

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

  • Пользователи
  • PipPipPip
  • 237 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 05 Ноябрь 2013 - 08:42

Как написать вычисление, при котором будут суммироваться значения из строк всех связанных записей в подчиненной таблице и выводиться в строке основной?
www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#2 CbCoder

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

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

Отправлено 05 Ноябрь 2013 - 09:16

Запрос к подчиненной таблице с условием "поле связи с родительской равно id текущей родительской записи", затем либо использование агрегатной функции sum, либо просто проход по всем записям с суммированием. В документации должны быть примеры.

#3 ber

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

  • Пользователи
  • PipPipPip
  • 237 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 05 Ноябрь 2013 - 10:11

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

Вот такой код, но всегда считает цифру 1, почему?

$znachenID=$line['Компания'];
//получаем количество значений
//поле 1175 - содержит связь с основной таблицей, соответственно ниже мы считаем сколько раз повторено такое же значение в этом поле
$sqlQuery = "SELECT count(`f1175`) AS cnt FROM `".DATA_TABLE."92` WHERE (`status`<>'2' AND `f1175`='" . $znachenID . "')";
$result = mysql_query($sqlQuery) or user_error(mysql_error() . "<br>" . $sqlQuery . "<br>", E_USER_ERROR);
$row = mysql_fetch_assoc($result);
//в итоге в вот здесь $row['cnt'] будет находится количество записей в связанной таблице
//можно записать в какое-то поле основной таблицы
$line['Компания']['Кол-во записей']=$row['cnt'];

www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#4 ber

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

  • Пользователи
  • PipPipPip
  • 237 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 05 Ноябрь 2013 - 10:14

Отбой, сработало, нашел ошибку


$znachenID=$line['Компания']['ID'];
//получаем количество значений с таким же значением какое занесли
//поле 1175 - содержит связь с основной таблицей, соответственно ниже мы считаем сколько раз повторено такое же значение в этом поле
$sqlQuery = "SELECT count(`f1175`) AS cnt FROM `".DATA_TABLE."92` WHERE (`status`<>'2' AND `f1175`='" . $znachenID . "')";
$result = mysql_query($sqlQuery) or user_error(mysql_error() . "<br>" . $sqlQuery . "<br>", E_USER_ERROR);
$row = mysql_fetch_assoc($result);
//в итоге в вот здесь $row['cnt'] будет находится количество записей в связанной таблице
//можно записать в какое-то поле основной таблицы
$line['Компания']['Кол-во записей']=$row['cnt'];

www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#5 ber

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

  • Пользователи
  • PipPipPip
  • 237 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 05 Ноябрь 2013 - 12:39

Как добавить еще одно условие к подчиненной записи, число которых надо?


$znachenID=$line['Компания']['ID'];
//получаем количество значений с таким же значением какое занесли
//поле 1175 - содержит связь с основной таблицей, соответственно ниже мы считаем сколько раз повторено такое же значение в этом поле
$sqlQuery = "SELECT count(`f1175`) AS cnt FROM `".DATA_TABLE."92` WHERE (`status`<>'2' AND `f1175`='" . $znachenID . "' AND `fXXXX`='Продан')";
$result = mysql_query($sqlQuery) or user_error(mysql_error() . "<br>" . $sqlQuery . "<br>", E_USER_ERROR);
$row = mysql_fetch_assoc($result);
//в итоге в вот здесь $row['cnt'] будет находится количество записей в связанной таблице
//можно записать в какое-то поле основной таблицы
$line['Компания']['Кол-во записей']=$row['cnt'];

Так правильно?

Сообщение отредактировал ber: 05 Ноябрь 2013 - 12:41

www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#6 CbCoder

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

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

Отправлено 05 Ноябрь 2013 - 13:28

Да. Не работает что ли?

#7 ber

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

  • Пользователи
  • PipPipPip
  • 237 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 05 Ноябрь 2013 - 15:02

Да, работает :)
www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#8 ber

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

  • Пользователи
  • PipPipPip
  • 237 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 05 Ноябрь 2013 - 17:53

Просчет при удалении записи (той, в которой стоит вычисление) почему-то работает некорректно, после удаления первой записи строка в связанной таблице $line['Компания']['Кол-во записей'] не претерпевает изменений. После удаления второй снижается на 1. После удаления всех записей в поле $line['Компания']['Кол-во записей'] остается цифра 1.
Далее если опять добавляем запись цифра 1 в строке $line['Компания']['Кол-во записей'] не изменяется на 2, после добавления второй меняется на 2.

Используемый код:
$znachenID=$line['Компания']['ID'];
//получаем количество значений с таким же значением какое занесли
//поле 1175 - содержит связь с основной таблицей, соответственно ниже мы считаем сколько раз повторено такое же значение в этом поле
$sqlQuery = "SELECT count(`f1175`) AS cnt FROM `".DATA_TABLE."92` WHERE (`status`<>'2' AND `f1175`='" . $znachenID . "')";
$result = mysql_query($sqlQuery) or user_error(mysql_error() . "<br>" . $sqlQuery . "<br>", E_USER_ERROR);
$row = mysql_fetch_assoc($result);
//в итоге в вот здесь $row['cnt'] будет находится количество записей в связанной таблице
//можно записать в какое-то поле основной таблицы
$line['Компания']['Кол-во записей']=$row['cnt'];

В чем проблема?

Сообщение отредактировал ber: 05 Ноябрь 2013 - 17:56

www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#9 CbCoder

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

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

Отправлено 05 Ноябрь 2013 - 18:00

Вычисление при удалении записи срабатывает ДО собственно удаления записи, с тем чтобы при необходимости это удаление отменить (см. документацию), поэтому при любых запросах эта запись будет оставаться активной. Вы должны самостоятельно исключать ее из расчета.





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

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