powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как посчитать сумму заказа?
25 сообщений из 42, страница 1 из 2
как посчитать сумму заказа?
    #38974592
mandarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть 4 таблицы:
заказ(id_заказа, id_сборки, id_доставки, id_товара),
товар(id_товара, название, цена),
доставка(id_доставки, город, цена),
сборка(id_сборки, вид, цена).

Как сделать что бы при заполнении полей таблицы заказ, поле сумма рассчитывалось как цена товара+цена доставки+цена сборки
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974596
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Mandarina!
You wrote on 2 июня 2015 г. 18:31:44:

Mandarina> Как сделать что бы при заполнении полей таблицы заказ, поле сумма
> рассчитывалось как цена товара+цена доставки+цена сборки
так и делай.
либо в триггере, либо в вычисляемом поле.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974599
mandarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий, а вы не подскажите как это сделать в вычисляемом поле?
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974603
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Как сделать что бы при заполнении полей таблицы заказ, поле сумма

А где там поле сумма?

P.S. Вычисляемым полем не делай, делай триггером.
А-то и ХП, если триггер сильно большой получится.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974605
mandarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
там должно быть так: заказ(id_заказа, id_сборки, id_доставки, id_товара, сумма)
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974618
mandarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам,

если хп, то у меня получается только так:

create or alter procedure UP_SUMMA (
ID_ZAK smallint)
as
begin
update zakaz set zakaz.summa=:tovar.cena+dostavka.cena.+sborka.cena
where id_zakaza=:id_zak;
end

я не понимаю как сделать саму процедуру
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974622
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mandarinaupdate zakaz set zakaz.summa=:tovar.cena +dostavka.cena.+sborka.cena
where id_zakaza=:id_zak;Выделенные значения надо тоже передать в эту ХП в кач-ве входных аргументов.
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974623
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
summa = (select cena from tovar where id_zakaza = :id_zak)
      + (select cena from dostavka where id_zakaza = :id_zak)
      + (select cena from sborka where id_zakaza = :id_zak);



Что в триггере, что в ХП.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974624
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, да, Таблоид прав, там же отдельные поля.
Только передавать надо, конечно, не доп.параметры,
а 1 параметр id_zakaza, а по нему вытаскивать остальные
id_товара, id_доставки, id_сборки и по ним фильтровать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974625
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамКстати, да, Таблоид прав, там же отдельные поля.
Только передавать надо, конечно, не доп.параметры,
а 1 параметр id_zakaza, а по нему вытаскивать остальные
id_товара, id_доставки, id_сборки и по ним фильтровать.да, это правильнее.
Но если в "вызывателе" уже есть id_доставки и id_сборки, то зачем дёргать таблицы лишний раз ? Лучше тогда вообще передавать эти параметры как необязательные и разрулить в ХП эту ситуацию через if-else.
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974629
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> Но если в "вызывателе" уже есть id_доставки и id_сборки,
Таблоид> то зачем дёргать таблицы лишний раз ?

Потому что ХП ничего про вызыватель не знает и не должна.
Если вызыватель (триггер в данном случае) умнее вызываемого -
пусть сам суммирует.

Таблоид> Лучше тогда вообще передавать эти параметры как
Таблоид> необязательные и разрулить в ХП эту ситуацию через if-else.

Это плохой дизайн. Но с т.з. произв-ти, да, лучше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974634
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mandarinaКак сделать что бы при заполнении полей таблицы заказ, поле сумма
рассчитывалось как цена товара+цена доставки+цена сборки
Запрос с union all + SUM() не предлагать?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974639
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамплохой дизайн. Но с т.з. произв-ти, да, лучше.я знаю, что "чем умнее ХП, тем хуже для неё". Но после многочисленных замеров прошлого года, связанных с имитацией олтп-грузилова, убедился, что чем меньше лазишь на диск, тем крепче сон :-)
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974643
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov> Запрос с union all + SUM() не предлагать?..

Те же яйца, но в профиль.
Только протухшие.
Зачем такое советуешь?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974644
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> я знаю, что "чем умнее ХП, тем хуже для неё"

Ничего подобного. Это правило для триггеров.

> Но после

Это называется доимитировался. А теперь покрути в
голове эту ситуацию с т.з. триггера, ХП и кеша - в
любом раскладе твой вариант худший из возможных. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974645
mandarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов РустамКстати, да, Таблоид прав, там же отдельные поля.
Только передавать надо, конечно, не доп.параметры,
а 1 параметр id_zakaza, а по нему вытаскивать остальные
id_товара, id_доставки, id_сборки и по ним фильтровать.


а как их вытащить?
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974647
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамЗачем такое советуешь?
В отличии от некоторых я не люблю раздавать гранаты в виде хранимых агрегатов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974648
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамТаблоид> я знаю, что "чем умнее ХП, тем хуже для неё"

Ничего подобного. Это правило для триггеров.Это универсальное правило: чем меньше модуль знает об окружающем мире, тем проще будет его код. И тем спокойнее будет жазнь аффтара этого кода.

Гаджимурадов РустамА теперь покрути в
голове эту ситуацию с т.з. триггера, ХП и кеша - в
любом раскладе твой вариант худший из возможных. :)Не понял тут, поясни плз. Что значит "с т.з. триггера, ХП и кеша", особенно про кеш ?
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974651
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mandarina> а как их вытащить?

Select <что_нужно_вытащить> from zakaz where id_zakaz = :id

В принципе этот запрос можно сделать универсальным

Select <что_нужно_вытащить> from <таблица> where <условие>
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974652
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov> В отличии от некоторых я не люблю раздавать гранаты в виде хранимых агрегатов.

Согласен, до них дорасти надо.
Но сабж уже есть хранимый агрегат.
Курсовая, наверное.

Таблоид> Это универсальное правило: чем меньше модуль знает
Таблоид> об окружающем мире, тем проще будет его код

Во-первых, нет такого правила. Во всяком случае,
как утверждение оно верно, но не как правило и не
как руководство к написанию кода (и его простоте).

> Не понял тут, поясни плз. Что значит "с т.з. триггера, ХП и кеша", особенно про кеш ?

Ну кеш - это про твоё "диск". А "триггер vs ХП" -
это второй вариант, без кеша. Третий - твой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974653
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамНо сабж уже есть хранимый агрегат.
Нет. Для тех, у кого телепатор не работает, поясняю: "поле сумма" оно не в таблице, оно на
междумордии ползателя.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974658
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам> Не понял тут, поясни плз. Что значит "с т.з. триггера, ХП и кеша", особенно про кеш ?

Ну кеш - это про твоё "диск". А "триггер vs ХП" -
это второй вариант, без кеша. Третий - твой.Извиняй, но всё равно не понимать я что-то по русськи :-)
Вот это вот:ГРв любом раскладе твой вариант худший из возможных- обоснуй детально, плз.
Чем вот такое вот:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create procedure sp_get(
  a_zakaz_id int,
  a_dostavka_id int = null,
  a_nacenka_id int = null
) returns ( summa_vsego numeric(12,2) )
as
begin
  if ( a_dostavka_id is null and a_nacenka_id is null ) then 
        <лезем за всеми данными в таблицы и затем применяем формулу для summa_vsego>
  else if ( a_dostavka_id is null ) then
        <лезем только за ценой доставки в соотв. таблицу и затем применяем формулу для summa_vsego>
  else
        <никуда не лезем, сразу применяем формулу для summa_vsego>
end
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974659
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... пардон, коммит был раньше положенного...
ну так вот: чем этот вариант "худший из возможных" ?
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974661
mandarina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам,

так?

create or alter procedure UP_SUMMA (
ID_ZAK smallint)
as
begin
update zakaz set zakaz.summa = (select cena from tovar where id_tovara = (select id_tovara from zakaz where id_zakaza = :id_zak ))
+ (select price from dostavka where id_dostavki = (select id_dostavki from zakaz where id_zakaza = :id_zak ))
+ (select cena from sborka where id_sborki = (select id_sborki from zakaz where id_zakaza = :id_zak ))
where id_zakaza=:id_zak;
end
...
Рейтинг: 0 / 0
как посчитать сумму заказа?
    #38974663
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DS> Нет. Для тех, у кого телепатор не работает, поясняю:
DS> "поле сумма" оно не в таблице, оно на междумордии ползателя.

Мой сегодня на полке, поэтому я этот момент уточнил. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 42, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как посчитать сумму заказа?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]