阅读有关Triggers
,Equi-Joins
和cross-joins
有我的头纺纱和摸不清我需要什么。
基本上,我有3个表:
Table 1: Users
id
username
score
Table 2: Acts
act_id
act
user_id
act_score
Table 3: Votes
vote_id
act_id
user_voter
score_given
当投票演员,我希望MySQL的score_given
自动添加到用户score' and to the
act_score`。
这是可能的,什么类型JOIN
和/或TRIGGER
我需要。如果有人感觉真的很慷慨,他们能为我提供的SQL代码?我真的努力让我的头围绕此...
我会建议使用VIEW
为需要计算分数每个User
或Act
。这将保证成绩永远是正确的,你不会需要大量的触发器。
更新:
1)从Users
和Acts
表得分;
2)创建视图ActsWithScore
:
CREATE VIEW ActsWithScore AS
SELECT
*,
(SELECT SUM(Votes.score) FROM Votes WHERE Votes.act_id = Acts.act_id) AS act_score
FROM Acts;
3)创建视图UsersWithScore
:
CREATE VIEW UsersWithScore AS
SELECT
*,
(SELECT SUM(ActsWithScore.act_score) FROM ActsWithScore WHERE ActsWithScore.user_id = Users.id) AS user_score
FROM Users;
4)现在,你可以通过下面的命令查询数据:
SELECT *
FROM UsersWithScore
和
SELECT *
FROM ActsWithScore
你已经做了所有这些变化之后,不要忘记改变Users
到UsersWithScore
和Acts
在所有的地方ActsWithScore
你在哪里查询分数。
PS。对不起,我没有手头有MYSQL,现在,所以我如果有一些语法错误承担。
触发器是最明显的解决方案,但它可以添加一个维护问题。如果您的应用程序并不大/复杂的你生病被罚款。此外,我喜欢在业务层做两插入。如果你正在做一个插入,为什么不这样做两个插件?它可以增加开销您的应用程序,但如果您的应用程序是不是一个这样做上千次/秒你生病被罚款。
CREATE TRIGGER TRIGGER_NAME
AFTER INSERT ON TABLE_1
FOR EACH ROW
BEGIN
// Insert into another table values ( new.x, new.y...);
END;