所以,我有一个表A,每次用户发送图像时,都会创建一条记录,记录上传时间,用户的用户名以及随时间上传的所有图像中的图像编号。
我需要制作第二个表B,它将存储每个用户上传的图像数量和用户名。我需要在A中生成新条目时更新此表B.
我发现可以创建一个触发器功能,但是我很难找到一个适合我需要的例子。
有谁知道我想要的方式吗?
答案 0 :(得分:2)
只需更新b
表格,其中包含当前用户a
在NEW.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履行和触发器创建必须在一个事务中逐个执行)。 我在本地数据库上创建了类似的触发器。他们工作得很好。 )))