2012-08-11 45 views
1

我想上乐透结果执行一些基本的分析:)彩票号码分析

我有一个看起来像一个数据库:

id|no|day|dd|mmm|yyyy|n1|n2|n3|n4|n5|n6|bb|jackpot|wins|machine|set 
-------------------------------------------------------------------- 
1 |22|mon|22|aug|1999|01|05|11|29|38|39|04|2003202| 1 | Topaz | 3 
2 |23|tue|24|aug|1999|01|06|16|21|25|39|03|2003202| 2 | Pearl | 1 

这只是一个例子。所以,n1到n6是彩票中的标准球,bb代表奖金球。

我想要写一个PHP/SQL代码,将显示还没有出来的数字只是一个随机序列。但是,如果数字01,04,05,11,29,38和39已经出来,我不希望代码打印出它们的数字,但只是以不同的顺序,因为理论上它们的数字已经是中奖号码。

我不能让我的头围绕这一逻辑。我会很感激任何帮助。

在此先感谢

+0

http://www.w3schools.com/php/func_array_shuffle.asp? – 2012-08-11 18:32:17

+1

“我想写一个PHP/SQL代码,它将显示尚未出来的数字序列。”......我不确定这意味着什么。你知道在一个典型的乐透抽签中有数以百万计的排列组合。你想输出不在数据库中的每个排列? – 2012-08-11 18:34:00

+0

不,它只会产生一个随机序列,抱歉没有说明 – 2012-08-11 18:34:49

回答

1

假设球按升序存储在数据库中,就像你给出的例子,你可以只产生6个号码的随机序列,对它们进行排序,然后生成1项随机奖励数。一旦你这样做,这将只是做一个简单的SQL查询到数据库,看到的问题,如果有结果回来:

$nums=...//generate your 6 numbers plus bonus number here 
sort($nums); 

$mysqli=new mysqli('...','...','...','...'); 
$stmt=$mysqli->prepare("SELECT * FROM table 
    WHERE n1=? AND n2=? AND n3=? AND n4=? AND n5=? AND n6=? AND bb=?"); 
$stmt->bind_param('iiiiiii', $nums[0], $nums[1], $nums[2], $nums[3], $nums[4], $nums[5], $nums[6]); 
$stmt->execute(); 
$stmt->store_result(); 

if($stmt->num_rows==0) 
    //your numbers have not been drawn before - return them 
else 
    //otherwise loop round and try again 

只要数的两个名单(不包括奖金球)进行排序,您将不会遇到任何已经绘制的数字排序的问题。

这将成为作为你的以前的数据库绘制得到更充分的效率不高,但我不认为你会担心,对于一个几十年。 :-)

+0

球可以以任何顺序。 123应该被认为与312相同。 – HappyTimeGopher 2012-08-11 18:56:54

+0

@HappyTimeGopher因此,随机生成球的排序。 – Gareth 2012-08-11 19:05:40

+0

你是对的 - 我错过了。作为性能提升(由@JaredFarrish建议),可以创建一个附加列,并将所有数字一起运行。然后在它上面添加一个索引,甚至在几十年后它就会飞起来。 – HappyTimeGopher 2012-08-11 19:11:25

1

怎么样在一些顺序排序每个已绘制的结果(每行),可能上升,然后排序组已经得出结果(所有行)?然后,您可以轻松查看列表中的哪些内容,以便查看哪些内容可以绘制。

比如你要一个永远取用设置之前说什么?你只需要遍历列表,直到你发现一个“漏洞”,这将是一个从未绘制的集合。如果你想进一步优化,你可以存储你最后发现的一个“漏洞”。那么你永远不需要遍历列表的同一部分两次,甚至可以放弃列表中“已完成”的部分以节省磁盘空间,或者如果你想要随机创建新的数字,你可以从列表中随机偏移开始。

要做到这一点,你有效应该做出额外的列来存储预有序集合。例如,如果您有(5,3,6,4,1,2)该列可以包含010203040506.添加足够的零以便数字出现在固定的偏移量基础上。