|
|
|
Триггер с вложенным запросом
|
|||
|---|---|---|---|
|
#18+
Прошу помочь написать триггер, который будет выполнять следующий запрос Код: sql 1. 2. 3. 4. 5. 6. 7. Проблема заключается в том, что у меня не получается переделать подобный запрос так, что бы он работал в триггере, я так понимаю поля NEW и OLD не доступны во вложенных запросах. А если не использовать вложенный запрос, то получается как-то не очень хорошо. Так же мне интересно, что будет в случае обновления сразу нескольких строк в таблице на которой будет этот триггер, я могу это конечно проверить или погуглить, но мне интересно хорошо ли это делать или будет лучше делать это в коде (php)? И еще, есть ли возможность сделать триггер сразу и на обновление и на создание таблицы, не создавая двух одинаковых. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2016, 18:11 |
|
||
|
Триггер с вложенным запросом
|
|||
|---|---|---|---|
|
#18+
Где триггер, какой триггер, нахрена он вообще нужен... нипанятна. Evgeniy57что будет в случае обновления сразу нескольких строк в таблице на которой будет этот триггерТриггер всегда обрабатывает вставку/обновление/удаление ОДНОЙ записи. Сколько записей затронуто, столько раз и "выстрелит" триггер. Evgeniy57есть ли возможность сделать триггер сразу и на обновление и на создание таблицы, не создавая двух одинаковых.Нет. Да и не могут они быть одинаковыми. Evgeniy57я могу это конечно проверить или погуглить Лучше бы ты мог документацию почитать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2016, 18:16 |
|
||
|
Триггер с вложенным запросом
|
|||
|---|---|---|---|
|
#18+
Akina, да тут не очень важно какой и где триггер, нужно просто как-то запрос переделать таким образом, что бы не было джоина со вложенным запросом. Читал я документацию, перестраховываюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2016, 18:26 |
|
||
|
Триггер с вложенным запросом
|
|||
|---|---|---|---|
|
#18+
Ну тогда покажите DDL таблиц (лишние поля - поскипать), и объясните суть происходящего. Evgeniy57нужно просто как-то запрос переделать Никогда не переделывай. Всегда делай с нуля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2016, 18:44 |
|
||
|
Триггер с вложенным запросом
|
|||
|---|---|---|---|
|
#18+
Akina, ок. Имеем две таблицы: table a id | total_cost table b id | a_id | cost В таблице может быть несколько записей с a_id и разной cost, необходимо посчитать суммарные значения для каждого a_id и обновить таблицу a. Тот запрос, что я писал выше, справляется с этой задачей, приведу его к нашему примеру: Код: sql 1. 2. 3. 4. 5. 6. Но в триггере такой запрос не прокатит, нам не надо каждый раз пересчитывать всю таблицу - это лишняя нагрузка. Нам нужно считать только конкретные изменения в конкретной записи (прибавлять или вычитать из суммарной стоимости в таблице а). Тут то и проблема, так как мы не можем засунуть поля NEW и OLD в этот вложенный запрос и выполнять условие (WHERE), с ним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2016, 19:42 |
|
||
|
Триггер с вложенным запросом
|
|||
|---|---|---|---|
|
#18+
Evgeniy57, зачем вложенный запрос? update a set total_cost = total_cost + new.cost - old.cost where a.id=a_id; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2016, 19:55 |
|
||
|
Триггер с вложенным запросом
|
|||
|---|---|---|---|
|
#18+
retvizan, хмм.. и правда, как я сам не догадался, видимо нужно поспать. Ведь группировка то больше не нужна, раз мы только с одним полем работает. Спасибо большое! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2016, 19:59 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=101&tid=1831784]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
73ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 427ms |

| 0 / 0 |
