Показать сообщение отдельно
Старый 13.03.2005, 16:28     # 5
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
Код:
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

а оценку выводить уже по запросу(т.е. делать агрегат каждый раз, а не хранить его и обновлять постоянно).
__________________
убрано по просьбе администратора
Sheryld вне форума