Код:
UPDATE votes SET round =
( SELECT avg( rating ) FROM reviews WHERE id = 1 GROUP BY id )
WHERE id = 1
а вот так примерно выглядит триггер:
Код:
CREATE TRIGGER [dbo].[VotesUpdateTrigger] ON [dbo].[reviews] WITH EXECUTE AS CALLER AFTER INSERT AS
begin
--check id
if (exists(select v.id from votes v
inner join inserted i
on v.id = i.id))
begin
UPDATE votes SET round =
( SELECT avg( rating ) FROM reviews WHERE id = 1 GROUP BY id )
WHERE id = 1
end
else
begin
insert into votes(id, round) select i.id, i.rating from inserted i
end
end
p.s. весь код тестировался под ms sql server 2005 beta2
mysql 4.1 к сожалению нету(там бы работал вложенный запрос).
ну и наконец, в целом, мне кажется невыгодной такая структура в принципе, тем более под мускул.
имхо должно быть так:
rtable eviews
review_id, text
table votes
vote_id, review_id, vote_result
а оценку выводить уже по запросу(т.е. делать агрегат каждый раз, а не хранить его и обновлять постоянно).