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


Сумма выборки


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

#1 dimichspb

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

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

Отправлено 01 Февраль 2010 - 13:57

Уважаемые Разработчики!


Помогите, пожалуйста, реализовать функциональность:

1. Есть таблица Счета, поля Номер, Сумма, Оплачено
2. Есть таблица Оплаты, поля Дата, Номер счета, Сумма

Проставляем оплаты в таблицу Оплаты. Значения поля Номер счета могут повторяться, поскольку по одному счету может быть несколько оплат.

Задача - сделать так, чтобы в поле Оплачено таблицы Счета отражалась сумма оплат по данному номеру счета.

Бьюсь три дня.

С уважением,
Дмитрий

#2 CbCoder

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

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

Отправлено 02 Февраль 2010 - 10:49

Через упрощенную функциональность (зная только имена таблиц и полей) вы это не реализуете на данный момент, здесь необходимо знать структуру базы данных, в частности как задавать таблицы и поля (физически в базе они хранятся под номерами, а не под "русскими" именами). Например, таблица Счета в стандартной конфинурации имеет номер 43, поле Сумма в той же таблице - номер 454. Их истинные имена выглядят как <prefix>data43 и f454 соответсвенно, где <prefix> - текущий префикс таблиц. Таким образом запрос на выборку данных из поля Сумма текущей строки таблицы Cчета будет выглядеть так:

$sqlQuery = "SELECT f454 FROM ".DATA_TABLE."43 WHERE id={ID}";
$result = mysql_query($sqlQuery);
$row = mysql_fetch_array($result);
return $row['f454 '];
Здесь DATA_TABLE - константа, равная <prefix>data (текущий префикс берется из файла config.php, он задается при установке программы), {ID} - шаблон номера ID текущей записи, подставляется при выполнении кода вычисляемого поля.

Для вашей задачи получаем следущий код:

$sqlQuery = "SELECT sum(f<номер поля Сумма таблицы Оплаты>) as summa FROM ".DATA_TABLE."<номер таблицы Оплаты> WHERE f<номер поля Счета таблицы Оплаты>={ID}";
$result = mysql_query($sqlQuery);
$row = mysql_fetch_array($result);
return $row['summa'];
Номера полей и таблиц можно посмотреть в Настройках соответствующих таблиц и полей, в адресной строке браузера (table и field соответственно)

В целях упрощения работы с вычисляемыми полями (чтобы не запутаться в этих всех номерах), нами была написана функция data_table, которая работает напрямую с русскими именами, но она пока не не позволяет делать сложные запросы, в частности вычисление групповых функций sql, как в вашем примере. Упрощенную функциональность мы будем развивать в следующих версиях.

#3 dimichspb

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

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

Отправлено 03 Февраль 2010 - 11:33

Огромное спасибо! Все работает, единственный момент - пришлось добавить в запрос условие status=0, чтобы в выборку попадали только активные оплаты.

#4 CbCoder

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

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

Отправлено 03 Февраль 2010 - 12:23

Просмотр сообщенияdimichspb (3.2.2010, 11:33) писал:

Огромное спасибо! Все работает, единственный момент - пришлось добавить в запрос условие status=0, чтобы в выборку попадали только активные оплаты.
Да, забыл уточнить, спасибо.





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

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