看看以下我做的电脑抽奖程序,谁能猜出是怎么实现的?活动:《商场月销售流水号抽奖》方式:
用一台普通的电脑,外壳新潮漂亮(门面问题,总不能在顾客面前丢脸吧^_^),配置不用太高,通过网线接到后台数据库服务器。数据库中有商场的所有销售记录,每个月有几百万条。本月初的第一个星期日做抽奖活动,抽奖范围为上个月的所有销售流水记录。销售流水号不重复,但也不是连续的!方法:
在电脑的抽奖程序中有一个“开始”按钮,按下按钮后,此按钮变成“停止”按钮,抽奖号码开始不停的随机滚动,这时随便叫一名观众,上台来按“停止”按钮抽奖。当按下“停止”按钮后,滚动号码立刻停止,屏幕上显示出中奖的销售流水号,毫无延时!“停止”按钮又变回“开始”按钮,可以再次进行抽奖!要求:
1、每次抽取的销售流水号必须是无规律的,随机的,不能重复的。
2、抽取的销售流水号必须是数据库中上个月所有销售记录中的一条。
3、当观众按下“停止”按钮后,屏幕立刻显示出中奖号码,无延时!

解决方案 »

  1.   

    goodsung(凄风冷雨) ,你没看清我的,我是说从数据库中分块将数据读出来,而不是一次性读完,读完当然要长时间啦。所以我才说我的是假随机嘛。
      

  2.   

    标准的随机函数谁都知道,
    数据库里的流水号有一堆,这堆号码的内容是不变的,
    新建一张抽取号码表:
    TABLE_RANDOM(ID,流水号ID)
    将流水重新编号为:ID,此ID连续到最大数值(=上月流水的总数),
    产生随机号,选取ID对应的"流水号ID",一次一条记录,速度和要求完全可以满足要求。MSN:[email protected]
    希望能跟大家交朋友!
    :)
      

  3.   

    Fzgta(蝈蝈) :
    高手,果然是高手!
    你说的方法和我实际做的是一模一样!
    连分析都和我想的一样!
    真是英雄所见略同!!!^_^呵呵......
      

  4.   

    给每个流水号都做一个index不就干净了?
      

  5.   

    这么简单的问题,也来问啊?select max(流水线号).....select min(流水线号).....然后betwen这两个数之间的随机数,即时读取该流水线号的数据咯,太简单了,486的机器就可以了,只要能运行你的客户端,每次只读3下数据库,当然快啦.
      

  6.   

    Fzgta(蝈蝈) 的想法果然妙,但要能按“停”即得结果,也必需预先读数据,而且要不断的读,才与按“停”有关,才不失公正。
      

  7.   

    if start then 
      show some id
    if stop then 
      show my id