所以这是我的问题,我有这个表提供程序,其列averageRating取决于保存在表评论中的用户的评分
我想要的是一个每当插入新评论时都会触发的功能
因此在带有提供者ID的评论表上插入评论 =>函数,用于对具有相同provider_id的提供者进行平均评分 => 更新提供者表上的averageRating
类似的东西
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js"></script>
<canvas id="chart"></canvas>
<button id="switch">Switch</button>
答案 0 :(得分:0)
要直接回答您的问题,请参考postgres文档https://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html,您必须创建一个函数来执行触发器。
CREATE FUNCTION update_average_rating()
RETURNS void
LANGUAGE plpgsql as $$
BEGIN
UPDATE providers SET averageRating = AVG(rating)
FROM reviews
WHERE providers.id = reviews.provider_id
AND NEW.provider_id = reviews.provider_id;
END;
$$;
CREATE TRIGGER updateAvg
AFTER INSERT OR UPDATE ON reviews
FOR EACH ROW
EXECUTE PROCEDURE update_average_rating();
但是,似乎更好的解决方案是使用架构设计来解决此问题。无论您需要在何处显示平均评分,都应成为采用平均值的视图的一部分,这样可以最大程度地降低数据库性能的实际成本,并根据需要检索按需价值。