问题描述
假设数据库A表中有一万条记录,现在要从中随机的取出100条不重复的记录 怎么做比较合适问题补充:可以用id来区分,我的意思是只要不是同一条记录取两次或多次就行了,不太明白lggege第三步的意思,去到10个随机数之后怎么在sql中进行查询呢,而且这10个随机数中也可能有重复的值,产生随机数的时候是否要先判断是否已存在呢
解决方案
理解楼主的意思了。在这里说下我的思路,你可以去随即生成1到10000之间的随机数,定义一个int数组,这里不用集合是因为数组的查询是最快的,在性能上有很大的优势,其中int数组在初始化的时候长度定义成100,来放置我们已经随即生成过的数,这样,每生成一个,就在数组中顺次加入一个,而每次生成的新随机数,我们都可以用Arrays类中的binarySearch(int[] a, int key)方法来查看是否已经随即生成过此数,如果已经生成则逃过此数,如果没有,则对数据库进行查找。我的方法比较笨,在这里给楼主个参考
解决方案二:
LZ,lggege的思路是这样的(1)..(2)生成10个不等随机数可以用random类,生成一个之后放入一个Set中,判断set.size()>=10 ? (break) : (continue);(3)可以用id in (x,x,x...)进行查询。
解决方案三:
不知道楼主说的重复是怎么重复,按正常的数据库设计,都要为数据设置一个id字段,来区别每一条数据,如果是不能通过id来区分的话,可以写一个set集合,然后在重写他的equals和hashCode方法,通过equals方法来区分每条数据,然后放入到set集合中。这样就可以做到不重复。随即选择则可以通过像楼上的朋友说的一样,来设置随机数来查询。
解决方案四:
我倾向于从 程序这边生成10个相异的随机数, 将这10个随机数作为条件放进去查询.10个随机数的取得:(1). 查询这个表的记录数(2). 以0 - (1)得到的记录数来生成10个不等的随机数(3). 将(2)得到的随机数放到sql中送到数据库.