我有一个表a,每次用户发送图像时,都会创建一条记录,存储上传的时间,用户的用户名以及随时间上传的所有图像中的图像编号。
我需要创建第二个表B,它将存储每个用户上传的图像数量和用户名。当a中生成新条目时,我需要更新表B
我发现可以创建一个触发器函数,但是我很难找到一个适合我需要的示例。
有谁知道我想要的方法吗?
只需更新b
表,从当前用户NEW.userid
中选择a
上插入的总记录计数(userid是您的列名或您在那里的任何名称,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;
根据您的描述,我认为您不需要第二张表了。您只需计算用户名出现的次数,就可以得到该用户上传的图像数量。
你可以像这样得到计数
SELECT COUNT(DISTINCT username) FROM table_name;
如果您仍然需要创建2个表,您可能需要查看过程及其工作方式。
假设我们有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实现和触发器创建必须在一个事务中一个接一个地执行)。我在本地数据库中创建了类似的触发器。它们很好用。))