Mysql从一个表触发到另一个表

时间:2015-09-18 17:33:32

标签: php mysql triggers

所以,我有一个表A,每次用户发送图像时,都会创建一条记录,记录上传时间,用户的用户名以及随时间上传的所有图像中的图像编号。

我需要制作第二个表B,它将存储每个用户上传的图像数量和用户名。我需要在A中生成新条目时更新此表B.

我发现可以创建一个触发器功能,但是我很难找到一个适合我需要的例子。

有谁知道我想要的方式吗?

3 个答案:

答案 0 :(得分:2)

只需更新b表格,其中包含当前用户aNEW.userid上的总插入记录的选择计数(用户ID是您的列名或您拥有的任何名称,而NEW是修复了要插入的当前值的mySql引用:

CREATE TRIGGER img_sum AFTER INSERT ON a
FOR EACH ROW SET b.total =  (SELECT COUNT(*) FROM a WHERE a.userid=NEW.userid)  
WHERE b.userid = NEW.userid;

答案 1 :(得分:1)

根据你的描述,我认为你不需要第二张桌子。您只需计算用户名称发生的时间,就可以获得用户上传的图像数量。

你可以通过这样的方式获得计数

SELECT COUNT(DISTINCT username) FROM table_name;

如果您仍然需要创建2个表,您可能需要查看过程及其工作方式。

答案 2 :(得分:1)

假设我们在这种情况下有3个表:

- users(id, username, email ....), 
- user_images(id, userId, image_num, date_uploaded)
- user_images_count(id, user_name, images_count)

user_images_count最初为空。我们必须通过这样的查询填写:

INSERT into user_images_count(user_name, images_count)
 SELECT (select username from users where ui.userId = id) as username, count(userId) as counter FROM `user_images` ui group by ui.userId;

然后,我们必须立即创建触发器,将每个INSERT操作处理到user_images表中。

CREATE TRIGGER `count_user_images` AFTER INSERT ON `user_images`
 FOR EACH ROW begin

declare u_name tinytext default "";
set u_name = (select username from users where id = NEW.userId limit 1);
if(u_name != "") then
    update user_images_count set images_count = images_count + 1 where user_name = u_name;
end if;
end

这两个查询(user_images_count履行和触发器创建必须在一个事务中逐个执行)。 我在本地数据库上创建了类似的触发器。他们工作得很好。 )))