根据另一个表自动将数据插入表中

时间:2014-02-06 09:50:13

标签: mysql sql join triggers

阅读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 the act_score`。

这是可能的,我需要什么类型的JOIN和/或TRIGGER。如果有人感觉非常慷慨,他们能为我提供sql代码吗?我真的很想弄清楚这个......

3 个答案:

答案 0 :(得分: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

完成所有这些更改后,请不要忘记在您查询分数的所有地方将Users更改为UsersWithScore并将Acts更改为ActsWithScore

PS。对不起,我现在手头没有MYSQL,如果有一些语法错误,请耐心等待。

答案 1 :(得分:1)

触发器是最明显的解决方案,但它可能会增加维护问题。如果你的应用程序不是那么大/复杂,你就可以了。 另外,我更喜欢在业务层进行两次插入。如果您正在进行插入,为什么不进行两次插入?它可能会增加你的应用程序的开销,但如果你的应用程序不是那么做几千次/秒,那你就没事了。

答案 2 :(得分:0)

CREATE TRIGGER TRIGGER_NAME 

AFTER INSERT ON TABLE_1
FOR EACH ROW
BEGIN
// Insert into another table values ( new.x, new.y...);
END;