将数据插入表自动根据其它表

问题描述 投票:0回答:3

阅读有关TriggersEqui-Joinscross-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 theact_score`。

这是可能的,什么类型JOIN和/或TRIGGER我需要。如果有人感觉真的很慷慨,他们能为我提供的SQL代码?我真的努力让我的头围绕此...

mysql sql join triggers
3个回答
1
投票

我会建议使用VIEW为需要计算分数每个UserAct。这将保证成绩永远是正确的,你不会需要大量的触发器。

更新:

1)从UsersActs表得分;

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

你已经做了所有这些变化之后,不要忘记改变UsersUsersWithScoreActs在所有的地方ActsWithScore你在哪里查询分数。

PS。对不起,我没有手头有MYSQL,现在,所以我如果有一些语法错误承担。


1
投票

触发器是最明显的解决方案,但它可以添加一个维护问题。如果您的应用程序并不大/复杂的你生病被罚款。此外,我喜欢在业务层做两插入。如果你正在做一个插入,为什么不这样做两个插件?它可以增加开销您的应用程序,但如果您的应用程序是不是一个这样做上千次/秒你生病被罚款。


0
投票
CREATE TRIGGER TRIGGER_NAME 

AFTER INSERT ON TABLE_1
FOR EACH ROW
BEGIN
// Insert into another table values ( new.x, new.y...);
END;
© www.soinside.com 2019 - 2024. All rights reserved.