Задавайте вопросы, мы ответим
Вы не зашли.
можно ли создать таблицу так, чтобы в одном из столбцов данные расчитывались автоматически, используя значения полей других таблиц?
Неактивен
Можно создать таблицу, а затем создать представление VIEW, которое будет содержать рассчитываемые столбцы
Неактивен
а реально ли это сделаать через триггер? триггер мне все-равно надо писать, целых 2 штуки!
Неактивен
Триггер позволяет изменять данные только в той строке, которая изменяется. Т.е. при INSERT, UPDATE можно данные в одном из столбцов считать автоматически, используя значения полей других таблиц. Но если потом данные из других таблиц изменяться, то данные в первой останутся неизменными.
Неактивен
Это очень хорошо. именно так и надо))
Неактивен
я написала:
DROP TRIGGER IF exists trig1;
#delimiter $$
CREATE TRIGGER trig1
AFTER INSERT ON orders
FOR EACH ROW
update orders set itogo= (select ocenka.price +(more.nacenka*ocenka.price/100) as total from ocenka, more, orders where orders.days = more.days
and orders.ocenkaid=ocenka.ocenkaid order by orderid)
where orderid=mew.orderid;
#Delimiter ;
а он ругнулся:
ERROR 1442 (HY000): Can't update table 'orders' in stored function/trigger because it is already used by statement which invoked this stored function/trigg
Неактивен
Посиотрите тему про блокировки
http://sqlinfo.ru/forum/viewtopic.php?pid=4096#p4096
Естественно, в Вашем случае нельзя выполнить update таблицы orders в триггере, т.к. таблица уже заблокирована выражением, вызвавшем триггер.
Неактивен
честно говоря, мои мозги уже кипят. как сделать так, чтобы триггер заработал?
Неактивен
Неактивен
ой! сильно стал ругаться
Неактивен
А что пишет?
Неактивен
mysql> \. tr1.sql
ERROR 1064 (42000): 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 '
;
CREATE TRIGGER trig1
before INSERT ON orders
FOR EACH ROW
set new.itogo= (sele' at line 1
mysql> \. tr2.sql
ERROR 1064 (42000): 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 '
;
Неактивен
У Вас наверное запрос в скобках заканчивается ";"
Если не это, то приведите полностью команду, которой создается триггер.
Неактивен
теперь выдает вот так:
mysql> \. tr1.sql
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO orders VALUES (Null, 12, '2008.10.10', 2, 5, 2500, 1);
ERROR 1242 (21000): Subquery returns more than 1 row
mysql> INSERT INTO orders VALUES (Null, 12, '2008.10.10', 2, 5, 2500, 1);
ERROR 1242 (21000): Subquery returns more than 1 row
mysql>
DROP TRIGGER IF exists trig1;
CREATE TRIGGER trig1
before INSERT ON orders
FOR EACH ROW
set new.itogo= (select ocenka.price +(more.nacenka*ocenka.price/100) as total from ocenka, more, orders where orders.days = more.days
and orders.ocenkaid=ocenka.ocenkaid order by orderid);
Неактивен
я так поняла ошибка в том, что селект выводит много строчек, а надо, чтобы одну
Неактивен
Ну так это понятно. Сколько результатов выдает Ваш подзапрос?
Неактивен
сделала вот так:
DROP TRIGGER IF exists trig1;
CREATE TRIGGER trig1
before INSERT ON orders
FOR EACH ROW
set new.itogo= (select ocenka.price +(more.nacenka*ocenka.price/100) as total from ocenka, more, orders where orders.days = more.days
and orders.ocenkaid=ocenka.ocenkaid and orderid=new.orderid);
добавлять добавляет, не ругается, но в поле itogo пишет NULL.
Неактивен
orderid=new.orderid
Чему по Вашему равен new.orderid?
Это и есть NULL.
Т.е. у Вас условие orderid=NULL.
Результат подзапроса, как следствие, тоже NULL
Неактивен
я попыталась переделать на AFTER, но опять не получилось!!!!! как же делается этот триггер???
Неактивен
Всё что Вам осталось сделать это написать подзапрос, который на основании данных из других таблиц рассчитает значение поля itogo.
Данные Вы добавляете командой:
Неактивен