使用序列循环更新列集?

时间:2016-01-11 16:11:30

标签: mysql sql loops sequence

我有一个数据库(邮件),里面有大约533,000条记录。我试图创建组,基本上,我可以用来选择记录区域。我想创建10组人。

因此,在' mailing'中,我有一个名为' group'的列。我想在每条记录中插入一个数字(从1到10)。一旦我达到10,我想从1开始重新循环序列。

更新列组'

后数据库的外观示例
  • 名字,姓氏,1
  • 名字,姓氏,2
  • 名字,姓氏,3
  • 名字,姓氏,4
  • 名字,姓氏,5
  • 名字,姓氏,6
  • 名字,姓氏,7
  • 名字,姓氏,8
  • 名字,姓氏,9
  • 名字,姓氏,10
  • 名字,姓氏,1
  • 名字,姓氏,2 ......

2 个答案:

答案 0 :(得分:1)

既然你提到了InnoDB,我就是在这里假设MySQL。

所以我会说:

SET @grp:=-1;
UPDATE Table set `Group`=(@grp:=(@grp+1)%10) + 1;

那就是说,我不会采用这种方法,我只想回答具体问题

在这里小提琴:http://sqlfiddle.com/#!9/82113/1

答案 1 :(得分:1)

评论太长了。

我不认为这是管理排除列表和联系策略的正确方法。相反,您应该保留一个列表(在表格中),列出在特定邮件中联系的人员。然后,对于下一封邮件,您可以选择未在上一封邮件中邮寄的人。

如果您确实需要将联系人分成十个相同大小的组,那么请考虑如何维护这些组:

  • 添加/删除/删除人员后会发生什么?
  • 当新人加入时,他们会进入即将邮寄的""小组(所以他们快速邮寄),还是随机分组?
  • 当新经理出现并想要8个小组时会发生什么?还是12?

在任何情况下,如果您采用这种方法,我建议您只是随机分配每个人:

update t
    set grp = floor(rand() * 10);