powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / update через суммирование из разных таблиц
23 сообщений из 23, страница 1 из 1
update через суммирование из разных таблиц
    #38629572
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, плиз, как записать слагаемые триггера, который обновляет строку таблица2 по событию в таблица1 ?
Как правильно указать выделенное жирным?

CREATE TRIGGER имятриггера AFTER INSERT ON таблица1
UPDATE таблица2 SET поле = TIME_TO_SEC ( таблица1.поле ) + TIME_TO_SEC ( таблица2.поле )
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38629583
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или же, может, имеет смысл таблица1.поле добавить в таблица2 и только потом складывать как поля одной таблицы?
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38629622
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manfredima,

во-первых, к обновляемым полям в триггере можно(нужно) обращаться через псевдо-псевдонимы :) new/old
во-вторых, вы хотите обновить всю Т2 или только какую-то одну запись, связанную с обновляемой записью в Т1? из запроса получается, что всю, но это необычно, поэтому уточните, действительно ли вы этого хотите.
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38629792
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. я читал про поля new/old, но сам понял, что таковыми нарекаются поля отслеживаемой таблицы (типа - предыдущее последнее и новое последнее ). А выходит - поля изменяемой :)

2. запись UPDATE таблица2 SET поле вроде бы даёт понять, что должно обновиться поле . В T2 - два поля и одна строка.
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38629876
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manfredimaя читал про поля new/old, но сам понял, что таковыми нарекаются поля отслеживаемой таблицы (типа - предыдущее последнее и новое последнее ). А выходит - поля изменяемой :)это поля той таблицы, изменения в которой вызывают триггер
как проще объяснить, я не знаю :)

manfredimaзапись UPDATE таблица2 SET поле вроде бы даёт понять, что должно обновиться поле . В T2 - два поля и одна строка.одно поле, но во всех строках
но если у вас всего одна строка в таблице, то разницы нет
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38629906
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manfredimaПодскажите, плиз, как записать слагаемые триггера, который обновляет строку таблица2 по событию в таблица1 ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TRIGGER `имятриггера` 
AFTER INSERT 
ON `таблица1` 
FOR EACH ROW
BEGIN
  UPDATE `таблица2` 
  SET `поле` = `таблица2`.`поле` + TIME_TO_SEC (NEW.поле)
  WHERE `таблица2`.`ключ` = NEW.`ключ`;
END;
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630192
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirэто поля той таблицы, изменения в которой вызывают триггер.я так и думал изначально, но вы неопределённо написали: " к обновляемым полям в триггере можно(нужно) обращаться через псевдо-псевдонимы :) new/old "

Ведь "обновляемые поля" - фраза не особо конкретная: обновляемые ЧЕМ - триггером или действием пользователя?
Теперь я точно знаю - что обновляемые юзером :)
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630209
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне немного непонятно место кода (жирным):

SET `поле` = `таблица2`.`поле` + TIME_TO_SEC (NEW.поле)
WHERE `таблица2`.`ключ` = NEW.`ключ`;


- обозначает ли запись NEW.поле - поле из T1, из новодобавленной юзером строки?
- что такое NEW.ключ ?
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630251
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я немного упростил (для себя) схему и теперь сюжет таков:

1. есть таблица jos_k2_items с полем extra_fields

2. есть таблица jos_k2_totaltime :

id totaltime plustime1 651:31:25 00:00:00
3. при добавлении новой строки в jos_k2_items триггер должен :
- значением из jos_k2_items.extra_fields обновить поле jos_k2_totaltime.plustime
- обновить jos_k2_totaltime.totaltime = jos_k2_totaltime.totaltime + jos_k2_totaltime.plustime

Код: plsql
1.
2.
3.
4.
5.
6.
CREATE TRIGGER update_totaltime AFTER INSERT ON jos_k2_items
FOR EACH ROW
 BEGIN
  UPDATE jos_k2_totaltime SET plustime = SUBSTRING('NEW.extra_fields' FROM (POSITION('"id":"10"' IN 'NEW.extra_fields') + 18) FOR 8); 
  UPDATE jos_k2_totaltime SET totaltime = SEC_TO_TIME(TIME_TO_SEC(plustime) + TIME_TO_SEC(totaltime)) WHERE id=1;
 END



Код с SUBSTRING и POSITION осмысливать не надо: я так получаю нужные данные и он работает.
Меня интересуют записи самих полей NEW.extra_fields - верно ли?
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630269
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manfredima,

https://dev.mysql.com/doc/refman/5.0/en/create-trigger.html Within the trigger body, you can refer to columns in the subject table (the table associated with the trigger) by using the aliases OLD and NEW. OLD.col_name refers to a column of an existing row before it is updated or deleted. NEW.col_name refers to the column of a new row to be inserted or an existing row after it is updated.

Если вы пытаетесь с помощью
manfredima
Код: plsql
1.
SUBSTRING('NEW.extra_fields' FROM ...

заставить триггер искать по всем полям исходной таблицы, то ничего у вас не получится. Кстати, поэтому я не верю, что
manfredimaКод с SUBSTRING и POSITION осмысливать не надо: я так получаю нужные данные и он работает .
Вот если бы кавычек не было, то это бы выглядело нормально.
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630290
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я имел ввиду, что код работал до того , как я вставил его в триггер и ввел NEW.поля
сейчас-то он, как раз, не работает с указанием ошибки в 4 строке, а в чем ошибка - я не понимаю, потому что и без кавычек выдаёт ошибку.
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630296
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirЕсли вы пытаетесь с помощью
manfredima
Код: plsql
1.
SUBSTRING('NEW.extra_fields' FROM ...

заставить триггер искать по всем полям исходной таблицы, то ничего у вас не получится. почему - по всем? Разве NEW.extra_fields не обозначает конкретное поле в колонке extra_fields из управляющей таблицы?
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630307
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TRIGGER update_totaltime AFTER INSERT ON jos_k2_items
FOR EACH ROW
BEGIN
  UPDATE jos_k2_totaltime SET 
    plustime  = SUBSTRING(NEW.extra_fields FROM (POSITION('id:10' IN NEW.extra_fields) + 18) FOR 8), 
    totaltime = SEC_TO_TIME(TIME_TO_SEC(plustime) + TIME_TO_SEC(totaltime)) 
  -- если в JOS_K2_TOTALTIME всего 1 строка, то WHERE - не надо, 
  -- иначе нужно как-то выбрать одну обновляемую строку, например, так:
  WHERE id=NEW.id; 
END
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630320
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manfredimaРазве NEW.extra_fields не обозначает конкретное поле в колонке extra_fields из управляющей таблицы?NEW.extra_fields - да
'NEW.extra_fields' - нет
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630350
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
строка "id":"10" именно такая изначально, я не могу убрать двойные кавычки
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630402
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на этот код

Код: plsql
1.
2.
3.
4.
5.
6.
7.
CREATE TRIGGER update_totaltime AFTER INSERT ON jos_k2_items
FOR EACH ROW
BEGIN
  UPDATE jos_k2_totaltime SET 
    plustime  = SUBSTRING(NEW.extra_fields FROM (POSITION('"id":"10"' IN NEW.extra_fields) + 18) FOR 8),
    totaltime = SEC_TO_TIME(TIME_TO_SEC(plustime) + TIME_TO_SEC(totaltime));
END



выдаёт ошибку "#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6 "
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630410
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вообще, по записи, ошибка в строке 5.
но и в случае заведомо неверной 'id:10' - ошибка всё равно есть
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630419
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manfredimaна этот код

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
DELIMITER //
CREATE TRIGGER update_totaltime AFTER INSERT ON jos_k2_items
FOR EACH ROW
BEGIN
  UPDATE jos_k2_totaltime SET 
    plustime  = SUBSTRING(NEW.extra_fields FROM (POSITION('"id":"10"' IN NEW.extra_fields) + 18) FOR 8),
    totaltime = SEC_TO_TIME(TIME_TO_SEC(plustime) + TIME_TO_SEC(totaltime));
END;
//



выдаёт ошибку "#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6 "
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630457
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '//' at line 8
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630506
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manfredimaавтор#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '//' at line 8
Это где вы такие сообщения находите?
http://sqlfiddle.com/#!2/68304/1
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630620
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в PhpMyAdmin у моего провайдера
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38630806
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так что же, в PhpMyAdmin такой триггер записать не получится?
...
Рейтинг: 0 / 0
update через суммирование из разных таблиц
    #38633833
manfredima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот такую запись принял PHPMyAdmin:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DELIMITER //
CREATE TRIGGER update_totaltime AFTER INSERT ON jos_k2_items
FOR EACH ROW
BEGIN
  UPDATE jos_k2_totaltime SET 
    plustime  = SUBSTRING(NEW.extra_fields FROM (POSITION('"id":"10"' IN NEW.extra_fields) + 18) FOR 8),
    totaltime = SEC_TO_TIME(TIME_TO_SEC(plustime) + TIME_TO_SEC(totaltime));
END;
//
DELIMITER ;



т.е. после // должно стоять DELIMITER ;
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / update через суммирование из разных таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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