2015-09-18 27 views
1

所以,我有一个表A中的每个用户发送的图像时,将创建一个记录存储它被上传的时候,用户的用户名以及图像数出的所有随时间推移上传的图片Mysql的触发从一个表到另一

我需要做的是将存储每个用户的用户名上传的图片的量的第二表B中。我需要当A.

生成一个新的条目,我发现一个触发功能可以被创建,但我有一个粗略的时间发现,将适合我的需要一个例子来更新这个表B中。

有谁知道干什么我想什么办法?

回答

2

只是总插入的记录上a从当前用户NEW.userid一个SELECT COUNT更新b表(用户ID是你的列名或任何名义在你那里,而新是一个固定的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; 
+0

谢谢你的答案,我会赤它 –

+0

什么是新的参数代表什么? –

+0

是插入的记录值的引用...即:如果您插入列名称,电话的值,您可以通过NEW.name,NEW.phone –

1

从你所描述的我不认为你需要第二个表。您只需计算用户名发生的次数,即可获得用户上传的图像数量。

你可以得到数做类似的东西

SELECT COUNT(DISTINCT username) FROM table_name; 

如果您仍然需要创建2个表,你可能想看看程序以及它们如何工作。

+0

的事情是,我将清空表每一次在一段时间,因为它是一种每周比赛。你会如何推荐我这样做两张桌子? –

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履行和触发创作必须在一个事务中,逐个进行)。 我在本地数据库上创建了类似的触发器。他们工作很好。 )))

+0

哇,我会试试 –

+0

你的SQL语法错误;请检查与您的MySQL服务器版本相对应的手册,以便在''a –

+0

附近使用正确的语法,请发布引发上述错误的完整查询 – RomanPerekhrest

相关问题