我想为MySQL数据库表中的一组行分配一个整数。我希望整数对于从1到表中行数的每一行都是唯一的。因此,如果表中有20行符合特定条件,我想为它们分配1到20之间的数字,这样如果通过这个数字选择它们,它们将被随机返回,而不是按照它们输入的顺序返回。
有人可以为此推荐一个解决方案吗?
谢谢, 米克
答案 0 :(得分:0)
有一种天真的方法可以解决这个问题,也是解决这个问题的一种非常有效的方法。
天真的方法是在0-20的内存中创建一个列表,使用随机数生成器对其进行洗牌,然后将结果存储在表中。
更好的方法涉及一种称为格式保留加密的东西,它在现实世界中用于生成新的,加密安全的随机和#34;信用卡号码,以及之前没有使用该号码的人员。
基本上使用格式保留加密,您可以使用加密技术将每个值0-N转换为也将为0-N的新数字。由于加密的性质(主要是它的可逆性),您可以保证不会重复(与散列函数不同)。当N变得非常大时,这实际上比实际改组更有效。
我建议阅读这个主题。如果有帮助,请查看我关于该主题的博文:http://blog.demofox.org/2013/07/06/fast-lightweight-random-shuffle-functionality-fixed/