首页 > 数据库 >MySQL_03--使用UPDATE根据一个表中的数据条数,更新另一个表的计数字段

MySQL_03--使用UPDATE根据一个表中的数据条数,更新另一个表的计数字段

时间:2022-12-04 15:31:23浏览次数:39  
标签:03 SET -- distribute 字段 user 表中 judge judgeNum

1 问题描述

1.1 两个表的具体内容

  1. 第一个表:t_user_judge
    1. 包含:评委id、分配的评分作品数assignNum、完成的评分作品数judgeNum;
    2. 其他信息字段。
  2. 第二个表:t_distribute
    1. 包含:与评委id对应的userID、作品的workID、作品是否完成评价的标志字段completed(0:未评价,1:已评价);
    2. 其他得分情况等具体信息字段。

1.2 实现目标

根据表t_distribute中标志字段completed的完成情况,通过评委的userID对应到t_user_judge中,进一步更新分配的评分作品数assignNum、完成的评分作品数judgeNum两个字段。

1.3 具体思路

  1. 得到表t_distribute中的全部内容;
  2. 遍历得到的所有数据;
  3. 更新评分作品数assignNum字段;
    1. 该字段只需判断每位评委在t_distribute中是否存在分配的作品,无需判断是否完成评价;
    2. 找到该条数据在t_user_judge中相同的评委id,就可以计数。
  4. 更新完成的评分作品数judgeNum字段;
    1. 该字段需判断每位评委在t_distribute中是否存在分配的作品,并且需要判断标志字段completed是否为1;
    2. 找到该条数据在t_user_judge中相同的评委id,completed为1,可以计数。

2 运行结果

/i/li/?n=2&i=images/100/blog/error_upload.png

3 完整代码

CREATE PROCEDURE update_judge_work () BEGIN
	DECLARE
		uID INT;#uID:t_workd的userID字段
	DECLARE
		comp INT;#isC:t_workd的isCompetition字段
	DECLARE
		a INT;#a:游标遍历完的标志
	DECLARE
		mycursor CURSOR FOR SELECT
		completed,
		userID
	FROM
		t_distribute;
	DECLARE
		CONTINUE HANDLER FOR NOT FOUND
		SET a = 1;#当读到数据的最后一条时,设置a变量为1
	UPDATE t_user_judge
	SET assignNum = 0;
	UPDATE t_user_judge
	SET judgeNum = 0;

	SET uID = 0;

	SET comp = 0;

	SET a = 0;#初始化变量no为0
	OPEN mycursor;#打开游标
	WHILE
			a = 0 DO#判断是不是到了最后一条数据
			FETCH mycursor INTO comp,
			uID;#读取游标中的数据分别一一存储
		UPDATE t_user_judge
		SET assignNum = assignNum + 1
		WHERE
			uID = t_user_judge.id;
		UPDATE t_user_judge
		SET judgeNum = judgeNum + 1
		WHERE
			uID = t_user_judge.id
			AND comp = 1;

	END WHILE;
	CLOSE mycursor;#关闭游标,清理游标数据

END;
CALL update_judge_work ();

标签:03,SET,--,distribute,字段,user,表中,judge,judgeNum
From: https://blog.51cto.com/husheng/5909991

相关文章