将随机整数分配给特定范围内的选定行

时间:2015-04-01 22:02:34

标签: mysql random

我想为MySQL数据库表中的一组行分配一个整数。我希望整数对于从1到表中行数的每一行都是唯一的。因此,如果表中有20行符合特定条件,我想为它们分配1到20之间的数字,这样如果通过这个数字选择它们,它们将被随机返回,而不是按照它们输入的顺序返回。

有人可以为此推荐一个解决方案吗?

谢谢, 米克

1 个答案:

答案 0 :(得分:0)

有一种天真的方法可以解决这个问题,也是解决这个问题的一种非常有效的方法。

天真的方法是在0-20的内存中创建一个列表,使用随机数生成器对其进行洗牌,然后将结果存储在表中。

更好的方法涉及一种称为格式保留加密的东西,它在现实世界中用于生成新的,加密安全的随机和#34;信用卡号码,以及之前没有使用该号码的人员。

基本上使用格式保留加密,您可以使用加密技术将每个值0-N转换为也将为0-N的新数字。由于加密的性质(主要是它的可逆性),您可以保证不会重复(与散列函数不同)。当N变得非常大时,这实际上比实际改组更有效。

我建议阅读这个主题。如果有帮助,请查看我关于该主题的博文:http://blog.demofox.org/2013/07/06/fast-lightweight-random-shuffle-functionality-fixed/