|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
У меня есть 4 таблицы: заказ(id_заказа, id_сборки, id_доставки, id_товара), товар(id_товара, название, цена), доставка(id_доставки, город, цена), сборка(id_сборки, вид, цена). Как сделать что бы при заполнении полей таблицы заказ, поле сумма рассчитывалось как цена товара+цена доставки+цена сборки ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 18:27 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Hello, Mandarina! You wrote on 2 июня 2015 г. 18:31:44: Mandarina> Как сделать что бы при заполнении полей таблицы заказ, поле сумма > рассчитывалось как цена товара+цена доставки+цена сборки так и делай. либо в триггере, либо в вычисляемом поле. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 18:31 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Мимопроходящий, а вы не подскажите как это сделать в вычисляемом поле? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 18:35 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
> Как сделать что бы при заполнении полей таблицы заказ, поле сумма А где там поле сумма? P.S. Вычисляемым полем не делай, делай триггером. А-то и ХП, если триггер сильно большой получится. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 18:39 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
там должно быть так: заказ(id_заказа, id_сборки, id_доставки, id_товара, сумма) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 18:42 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, если хп, то у меня получается только так: 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 я не понимаю как сделать саму процедуру ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 18:54 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
mandarinaupdate zakaz set zakaz.summa=:tovar.cena +dostavka.cena.+sborka.cena where id_zakaza=:id_zak;Выделенные значения надо тоже передать в эту ХП в кач-ве входных аргументов. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 18:57 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3.
Что в триггере, что в ХП. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 18:58 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Кстати, да, Таблоид прав, там же отдельные поля. Только передавать надо, конечно, не доп.параметры, а 1 параметр id_zakaza, а по нему вытаскивать остальные id_товара, id_доставки, id_сборки и по ним фильтровать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:00 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамКстати, да, Таблоид прав, там же отдельные поля. Только передавать надо, конечно, не доп.параметры, а 1 параметр id_zakaza, а по нему вытаскивать остальные id_товара, id_доставки, id_сборки и по ним фильтровать.да, это правильнее. Но если в "вызывателе" уже есть id_доставки и id_сборки, то зачем дёргать таблицы лишний раз ? Лучше тогда вообще передавать эти параметры как необязательные и разрулить в ХП эту ситуацию через if-else. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:04 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Таблоид> Но если в "вызывателе" уже есть id_доставки и id_сборки, Таблоид> то зачем дёргать таблицы лишний раз ? Потому что ХП ничего про вызыватель не знает и не должна. Если вызыватель (триггер в данном случае) умнее вызываемого - пусть сам суммирует. Таблоид> Лучше тогда вообще передавать эти параметры как Таблоид> необязательные и разрулить в ХП эту ситуацию через if-else. Это плохой дизайн. Но с т.з. произв-ти, да, лучше. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:06 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
mandarinaКак сделать что бы при заполнении полей таблицы заказ, поле сумма рассчитывалось как цена товара+цена доставки+цена сборки Запрос с union all + SUM() не предлагать?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:11 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустамплохой дизайн. Но с т.з. произв-ти, да, лучше.я знаю, что "чем умнее ХП, тем хуже для неё". Но после многочисленных замеров прошлого года, связанных с имитацией олтп-грузилова, убедился, что чем меньше лазишь на диск, тем крепче сон :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:13 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov> Запрос с union all + SUM() не предлагать?.. Те же яйца, но в профиль. Только протухшие. Зачем такое советуешь? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:17 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Таблоид> я знаю, что "чем умнее ХП, тем хуже для неё" Ничего подобного. Это правило для триггеров. > Но после Это называется доимитировался. А теперь покрути в голове эту ситуацию с т.з. триггера, ХП и кеша - в любом раскладе твой вариант худший из возможных. :) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:18 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамКстати, да, Таблоид прав, там же отдельные поля. Только передавать надо, конечно, не доп.параметры, а 1 параметр id_zakaza, а по нему вытаскивать остальные id_товара, id_доставки, id_сборки и по ним фильтровать. а как их вытащить? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:23 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамЗачем такое советуешь? В отличии от некоторых я не люблю раздавать гранаты в виде хранимых агрегатов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:26 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамТаблоид> я знаю, что "чем умнее ХП, тем хуже для неё" Ничего подобного. Это правило для триггеров.Это универсальное правило: чем меньше модуль знает об окружающем мире, тем проще будет его код. И тем спокойнее будет жазнь аффтара этого кода. Гаджимурадов РустамА теперь покрути в голове эту ситуацию с т.з. триггера, ХП и кеша - в любом раскладе твой вариант худший из возможных. :)Не понял тут, поясни плз. Что значит "с т.з. триггера, ХП и кеша", особенно про кеш ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:26 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
mandarina> а как их вытащить? Select <что_нужно_вытащить> from zakaz where id_zakaz = :id В принципе этот запрос можно сделать универсальным Select <что_нужно_вытащить> from <таблица> where <условие> Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:30 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov> В отличии от некоторых я не люблю раздавать гранаты в виде хранимых агрегатов. Согласен, до них дорасти надо. Но сабж уже есть хранимый агрегат. Курсовая, наверное. Таблоид> Это универсальное правило: чем меньше модуль знает Таблоид> об окружающем мире, тем проще будет его код Во-первых, нет такого правила. Во всяком случае, как утверждение оно верно, но не как правило и не как руководство к написанию кода (и его простоте). > Не понял тут, поясни плз. Что значит "с т.з. триггера, ХП и кеша", особенно про кеш ? Ну кеш - это про твоё "диск". А "триггер vs ХП" - это второй вариант, без кеша. Третий - твой. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:34 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамНо сабж уже есть хранимый агрегат. Нет. Для тех, у кого телепатор не работает, поясняю: "поле сумма" оно не в таблице, оно на междумордии ползателя. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:38 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам> Не понял тут, поясни плз. Что значит "с т.з. триггера, ХП и кеша", особенно про кеш ? Ну кеш - это про твоё "диск". А "триггер vs ХП" - это второй вариант, без кеша. Третий - твой.Извиняй, но всё равно не понимать я что-то по русськи :-) Вот это вот:ГРв любом раскладе твой вариант худший из возможных- обоснуй детально, плз. Чем вот такое вот: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:45 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
... пардон, коммит был раньше положенного... ну так вот: чем этот вариант "худший из возможных" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:46 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, так? 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:50 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
DS> Нет. Для тех, у кого телепатор не работает, поясняю: DS> "поле сумма" оно не в таблице, оно на междумордии ползателя. Мой сегодня на полке, поэтому я этот момент уточнил. :) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:52 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Таблоид> ну так вот: чем этот вариант "худший из возможных" ? Основных вариантов всего 3: 1. Триггер. Пока всё так просто - лучший вариант. 2. ХП, делающая всё, что нужно, по номеру заказа. Подробности вытаскивает сама, но они уже в кеше, пэтому "с диском" проблем не будет. Хуже 1, лучше 3. 3. Твой вариант ХП с плохим дизайном. Худший. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:55 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
mandarina> так? Ну типа того, только я бы ещё по переменным разложил, не люблю такие портянки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 19:56 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамМой сегодня на полке, поэтому я этот момент уточнил. :) А, да. Зафлудили этот момент как-то... mandarinaтам должно быть так: заказ(id_заказа, id_сборки, id_доставки, id_товара, сумма) Нет, Рина, так быть не должно, ибо это нарушение второй нормальной формы, которое карается геморроем. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 20:00 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, Большое спасибо за помощь! Все работает как надо))) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 20:01 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамТаблоид> ну так вот: чем этот вариант "худший из возможных" ? Основных вариантов всего 3: 1. Триггер. Пока всё так просто - лучший вариант.Ога. Особенно когда в таблице будут меняться поля НЕ из списка тех, что нужны для расчета суммы. И триггер сей всё равно будет дёргать все три(?) таблицы, чтобы обновить сумму, которая окажется той же самой :-) Гаджимурадов Рустам2. ХП, делающая всё, что нужно, по номеру заказа. Подробности вытаскивает сама, но они уже в кеше, пэтому "с диском" проблем не будет. Хуже 1, лучше 3.Откуда дровишки, что "они уже в кеше", если передаётся только номер заказа ? Ты утверждаешь, что при таком раскладе никогда не будет reads > 0 ? Гаджимурадов Рустам3. Твой вариант ХП с плохим дизайном. Худший.По дизайну - да, худший. По производительности - лучше, чем "2" (и тем более "1"), если значения наценки/доставки и прочего уже известны в вызывателе. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 20:07 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Таблоид> Особенно когда в таблице будут меняться поля Таблоид> НЕ из списка тех, что нужны для расчета суммы. Таблоид> И триггер сей всё равно будет дёргать все три(?) таблицы, Таблоид> чтобы обновить сумму, которая окажется той же самой :-) Во-первых, это будет и в твоём варианте, так что чья бы мычала. :) Во-вторых, никто не запрещает это проверять и не дергать. > Откуда дровишки, что "они уже в кеше", если передаётся только номер заказа ? Не понял вопроса. В триггере на инсерт-апдейт записи данные уже в кеше во всех нормальных ситуациях. > По производительности - лучше, чем "2" Ненамного, я полагаю. Таблоид> (и тем более "1") Нет, конечно. Конечно, много хуже. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 20:19 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
mandarina> Все работает как надо))) Вообще говоря, то, что ты написала - это на четвёрку с минусом. Так что тебе удачи, а преподу превед. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 20:20 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, главное сдать работу) Спасибо, передам))) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 20:27 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамВо-первых, это будет и в твоём варианте, так что чья бы мычала. :) Во-вторых, никто не запрещает это проверять и не дергать.1) я НЕ предлагал вызывать ХП из триггера. И вообще пришёл как-то к "фундаментальному открытию", что row-level триггеры, дёргающиеся как свиньи на верёвке на каждый чих, по поводу и без него, есть одна из сторон Мирового Зла.. :-) 2) ХП должна вызываться только из тех мест, где действительно надо обновлять итоговую сумму заказа. Звучит как Вселенская Ересь, согласен, но главное - поменьше триггеров! Код в таком случае становится больше, появятся дублирующиеся вызовы или, еще хуже, просто повторы кусков кода, легко забыть вызвать эту ХП - всё так. Но по производительности это точно будет выигрыш. Гаджимурадов РустамНе понял вопроса. В триггере на инсерт-апдейт записи данные уже в кеше во всех нормальных ситуациях.Про КАКУЮ таблицу вот из этих: Код: plaintext 1. 2. 3. 4.
Допустим, усер выбрал в своём приложении сборку, доставку и товар (через листбокс или еще чего-то там) - да, затащил в страничный кеш ФБ эти данные из соотв. справочников. Затем пожевал 5-10 минут, перетёр что-то с клиентом, и жмякнул "ОК". В этот момент в таблицу "заказ" добавляется строка с известными id_сборки, id_доставки, id_товара. Но откудова уверенность, что прочитанные N минут взад данные по ценам - еще сидят в кеше ? К тому же, нормальная аппликуха должна перечитать цены в момент жмякания "ОК", потому что они (цены!) могли измениться за то время, пока усер что-то там решал. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 20:47 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Таблоид> я НЕ предлагал вызывать ХП из триггера Это было дефолтным изначальным вариантом. Если ты что-то там имел в виду в подкоре, но молчал как партизан - это твои проблемы. :) > есть одна из сторон Мирового Зла.. :-) Это твои страхи и заблуждения, не более. Изначальное правило, о котором ты пытаешься мне напомнить, звучало совсем иначе. > ХП должна вызываться только из тех мест, где действительно надо Дальше можно не читать. Все что угодно должно вызываться только из тех мест и только тогда, когда действительно надо, и не вызываться из тех мест и тогда, когда не надо. Касательно сабжа, если ты про вызов с клиента при "Сохранить заказ" - это путь к отсутствию целостности в БД и тройке по курсовой. > Про КАКУЮ таблицу вот из этих: ты говоришь ? Про все, есессно. > Но откудова уверенность, что прочитанные N минут взад данные по ценам - еще сидят в кеше ? Я разверну этот вопрос тебе же, сам над ним подумай и доложи сюда ответ, а то аж позоришься. :-) Ей Богу, даже подсказывать неудобно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 21:12 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам> Но откудова уверенность, что прочитанные N минут взад данные по ценам - еще сидят в кеше ? Я разверну этот вопрос тебе же, сам над ним подумай и доложи сюда ответ, а то аж позоришься. :-) Ей Богу, даже подсказывать неудобно. Гы... вспомнилось: у нас в институте курс был, История КПСС и М-Л философия (нахрена он был нужен технарям - другой вопрос). И вёл его препод, которому задаёшь вопрос "а как вы объясните то-то", а он: "я бы поставил вопрос по-другому", "ваш вопрос слишком второстепенен", "сходите в деканат, там вам всё объяснят" (с занесением в учетную карточку комсомольца :)), "как вы в иинститут попали ?! вам не стыдно задавать такие глупые вопросы ?" или вообще: "а какой ответ вы ожидаете услышать?" ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 21:48 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Таблоид> Гы... вспомнилось А мне почему-то вспомнились Деда и Диля, "особливо на ляпасинах". Но если ты сильно настаиваешь, могу, конечно, "объяснить", "ответить", "рассказать", "изложить" или как тебе там угодно. Могу даже с примерами - на ляпасинах там, на ежах, ужах, моржах... Не так красиво как Деда, конечно, но всё же. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 21:59 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Объясни только вот это, плз:откудова уверенность, что прочитанные N минут взад данные по ценам - еще сидят в кеше ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 22:02 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Оттудова, родной, что прочитанные N минут критичные данные по любым ляпасинам перед любым "использованием" либо держатся в снапшоте (а долгих снапшотов не бывает), либо всегда перечитываются перед (и соответственно точно есть кеше). Дальше объяснять? P.S. Да, и цак надень. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 23:24 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Только меня смутил smallint для ID ? mandarina Код: sql 1.
Или сейчас он уже не настолько small ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 05:18 |
|
как посчитать сумму заказа?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустампрочитанные N минут критичные данные <...> всегда перечитываютсяну, и ? вот тебе их надо перечитать - и что, они перед этой перечиткой всегда в кеше торчат, да ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 08:52 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1562803]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
71ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
others: | 307ms |
total: | 504ms |
0 / 0 |