使用序列循环更新列集?
Update column set with sequence loop?
我有一个数据库(邮件),里面大约有 533,000 条记录。我正在尝试创建组,本质上,我可以使用它来 select 一个记录区域。我想创建10组人。
所以在 'mailing' 中,我有一个名为 'group' 的列。我想在每条记录中插入一个数字(从 1 到 10)。一旦我达到 10,我想从 1 开始再次循环序列。
更新列后数据库的外观示例 'group'
- 名字,姓氏,1
- 名字,姓氏,2
- 名字,姓氏,3
- 名字,姓氏,4
- 名字,姓氏,5
- 名字,姓氏,6
- 名字,姓氏,7
- 名字,姓氏,8
- 名字,姓氏,9
- 名字,姓氏,10
- 名字,姓氏,1
- 名字,姓氏,2 ...
既然你提到了 InnoDB,我在这里假设 MySQL。
所以我会这样说:
SET @grp:=-1;
UPDATE Table set `Group`=(@grp:=(@grp+1)%10) + 1;
也就是说,我不会采用这种方法,我只是想回答具体问题
Fiddle 这里:http://sqlfiddle.com/#!9/82113/1
我认为这不是管理排除列表和联系策略的正确方法。相反,您应该保留一份列表(在 table 中),其中包含在特定邮寄期间联系的人员。那么下次邮寄的时候,可以选择上次没有邮寄的人。
如果您确实有一些实际业务需要将联系人分为十个 equal-sized 组,然后考虑如何维护:
- 当人们 added/removed/deleted 时会发生什么?
- 添加新人时,他们是进入“next-to-be-mailed”组(以便快速收到邮件),还是随机分配到组中?
- 当新经理出现并想要 8 个组时会发生什么?还是 12?
无论如何,如果您继续采用这种方法,我建议您只是随机分配每个人:
update t
set grp = floor(rand() * 10);
我有一个数据库(邮件),里面大约有 533,000 条记录。我正在尝试创建组,本质上,我可以使用它来 select 一个记录区域。我想创建10组人。
所以在 'mailing' 中,我有一个名为 'group' 的列。我想在每条记录中插入一个数字(从 1 到 10)。一旦我达到 10,我想从 1 开始再次循环序列。
更新列后数据库的外观示例 'group'
- 名字,姓氏,1
- 名字,姓氏,2
- 名字,姓氏,3
- 名字,姓氏,4
- 名字,姓氏,5
- 名字,姓氏,6
- 名字,姓氏,7
- 名字,姓氏,8
- 名字,姓氏,9
- 名字,姓氏,10
- 名字,姓氏,1
- 名字,姓氏,2 ...
既然你提到了 InnoDB,我在这里假设 MySQL。
所以我会这样说:
SET @grp:=-1;
UPDATE Table set `Group`=(@grp:=(@grp+1)%10) + 1;
也就是说,我不会采用这种方法,我只是想回答具体问题
Fiddle 这里:http://sqlfiddle.com/#!9/82113/1
我认为这不是管理排除列表和联系策略的正确方法。相反,您应该保留一份列表(在 table 中),其中包含在特定邮寄期间联系的人员。那么下次邮寄的时候,可以选择上次没有邮寄的人。
如果您确实有一些实际业务需要将联系人分为十个 equal-sized 组,然后考虑如何维护:
- 当人们 added/removed/deleted 时会发生什么?
- 添加新人时,他们是进入“next-to-be-mailed”组(以便快速收到邮件),还是随机分配到组中?
- 当新经理出现并想要 8 个组时会发生什么?还是 12?
无论如何,如果您继续采用这种方法,我建议您只是随机分配每个人:
update t
set grp = floor(rand() * 10);