MySQL循环更新

时间:2017-10-25 15:49:08

标签: mysql round-robin

SQL专家,我很难理解我将如何完成这项任务。我有一个MySQL数据库表,有40k记录,我需要用标识符(循环法)更新group列。标识符是预定义的(2,5,9)。

我如何相应地更新此表?应该看起来像下面的例子:

record     group
-----------------
record A   2
record B   5
record C   9
record D   2
record E   5
record F   9
record G   2

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

在研究了几十篇文章之后,我制定了一个两步法来实现我所需要的。对于其他可能遇到过这种情况的人,我就是这样做的:

  

步骤1:创建一个存储过程以循环并为每条记录分配一个数字。数字1-3代表我有的三个循环值(2,5,9)。以下是程序:

DROP PROCEDURE IF EXISTS ezloop;
DELIMITER ;;

CREATE PROCEDURE ezloop()
BEGIN
DECLARE n, i, z INT DEFAULT 0;
SELECT COUNT(*) FROM `table` INTO n;
SET i = 1;
SET z = 1;
WHILE i < n DO 
  UPDATE `table` SET `group` = z WHERE `id` = i;
  SET i = i + 1;
  SET z = z + 1;
  IF z > 3 THEN
      SET z = 1;
  END IF;
END WHILE;
End;
;;

DELIMITER ;
CALL ezloop();
  

步骤2:创建一个简单的UPDATE语句,将每个值更新为我的实际循环值,并为每个组运行一次​​:

UPDATE `table` SET `group` = 9 WHERE `group` = 3;
UPDATE `table` SET `group` = 5 WHERE `group` = 2;
UPDATE `table` SET `group` = 2 WHERE `group` = 1;