日期:2014-05-20  浏览次数:20930 次

随机抽取数据库中的某些记录~~~
大家给点建议:谢谢
类似随机抽奖:数据库中有1000笔记录,
          第一次抽10比出来,第二次抽取8笔.....
已经抽取过的就不能再抽取拉~~~ 

现在是先取随机数作为行号取出该条记录~~


------解决方案--------------------
定義一個數組,用來記錄產生的隨機數,確保數組中的值不會重復就可以了
------解决方案--------------------
select top num * from table order by newid()

------解决方案--------------------
在指定范围内随机行号,记录行号,若重复下一次随机
------解决方案--------------------
我们用一个表来存储抽取出来的数据:

declare @a table(id int,f int) --id表示记录ID,f表示中奖档次如你有一/二/三等奖
--先三等奖10名
insert @a select top 10 id,3 from YourTAble order by newid()
--二等奖8名
insert @a select top 8 id,2 from YourTAble where id not in (select id from @a) order by newid()

--一等奖1名
insert @a select top 1 id,1 from YourTAble where id not in (select id from @a) order by newid()


--最后取出结果:
select A.*,B.F as 中奖档次 from YourTable A,@b B where A.id=B.id



------解决方案--------------------
我也提供一个思路:)

1:在记录上加一个标记,用来表示已被选\未被选,下一次抽取的时候只找未被选的
2: 把未被选的记录关键字加入一个列表中,按列表长度-1为最大值,0为最小值,用Random从0到最大值随机抽取下一个记录关键字在列表中的索引
3: 按随机找到的这个索引找到关键字去数据库查找记录并修改该记录的标记为选中.
------解决方案--------------------
定義一個數組,用來記錄產生的隨機數,確保數組中的值不會重復就可以了
-----------------------------
这个是可以的,把随机数存储起来
在来个随机索引
------解决方案--------------------
TO:在指定范围内随机行号,记录行号,若重复下一次随机

这样每次都要先判断行号是否重复 很影响效率

个人想法

将所有的id存入例如hashtable中 然后从中随机生成一些id 根据id去数据库去记录 然后将id从hashtable中删除,下一次生成id时 就不用担心id重复了



------解决方案--------------------
数据库有数据库的效率.
不要把后台的东西弄到前台来处理再弄回后台.
就是说是后台的东西,就不要放到前台去. 反之亦然.
这是规则.