基于MySQL数据库中的股票随机生成数字

问题描述:

嗨,大家好,我需要一些我在Php制作的脚本的帮助,目前它被设置为一个老虎机式的游戏,用户可以支付一点钱和3个随机数每个数字都可以链接到他们可以赢得的奖金。比赛3并赢得奖品。基于MySQL数据库中的股票随机生成数字

不幸的是,我不会总是有库存的每一项放弃作为奖励,我需要一种方法,通过每个数字检查并确定它是在股票

$stock = $conn -> query('SELECT DISTINCT ItemID FROM codes WHERE Available = 1');

而如果是库存增加它的算法,将随机挑选的3个数字

目前我有像这样

function generate_numbers(){ 
global $numbers; 
$numbers = array(
'0' => rand(1,2), 
'1' => rand(1,2), 
'2' => rand(1,2) 
); 
display_numbers(); 
} 

的设置它根据两个变量生成数字,每个数字链接到一个奖项,显然它没有考虑哪些数字有现货,这将导致我发放我没有的奖品,并且它不允许有优势

我需要一个简单的方法来检查一个物品是否有库存,如果它有库存,它会被添加到可以赢得的奖品列表中,我需要它有一个优势,所以一些奖品会更频繁地出现(很多)比其他基于简单数值的数据如代码X有0.25%的出现机会,并且科迪Y有50%的出现机会。

如果我有一个更大的数字范围设置它...

function generate_numbers(){ 
global $numbers; 
$numbers = array(
'0' => rand(1,100), 
'1' => rand(1,100), 
'2' => rand(1,100) 
); 
display_numbers(); } 

if (($numbers[0] > 0) && ($numbers[0] < 40)){ 
echo "you win prize x"; 
else if (($numbers[0] > 40) && ($number[0] < 50)){ 
echo "you win prize y"; 
else { 
echo "you win prize z"; 
} 

...我还是留下或者发放奖品我没有 - 我也可以添加一个嵌入的if else来检查是否存储了一个代码,是否给出它以及是否不给予奖励或给予默认奖励。

但是,这将意味着更多的代码我有库存的机会较高,他们有报错,我不希望我真的希望它是使用预定义的赔率完全公平..

所以希望所有有道理它不是一个过于复杂的问题,但我觉得挺不寻常的一个

感谢您的阅读,我期待着听到您的想法

卢克

+0

真的很有趣的问题:)我很好奇其他答案。 – EaterOfCode 2013-03-21 13:24:46

+1

我希望您有适当的许可证可以在您所在的国家/地区运行博彩网站 – mensi 2013-03-21 20:45:10

扫描你的问题,我想你需要至改变你的查询

$stock = $conn -> query('SELECT DISTINCT ItemID FROM codes WHERE Available = 1 ORDER BY RAND()'); 

这样,你先挑3和你有3个随机奖品,

这是一个快速的解决方案。有机会它会更复杂让我想...

编辑

一些测试,我认为我得到了它之后,

你需要顶部添加列chance这会是一个数量和该记录出现的几率则1 N个,

额外其中的代码是:

0 = FLOOR(RAND()*chance)

所以最后的代码是

$stock = $conn ->query(
    'SELECT DISTINCT ItemID FROM codes WHERE Available = 1 AND 0 = FLOOR(RAND()*chance) ORDER BY RAND()' 
); 
+0

我认为您对此有所了解我已将代码粘贴到我的查询中,并在每个代码中添加了变量部分,但我不完全确定'0 = FLOOR(RAND()* chance)'。它似乎影响数据库,并使项目具有较低的机会值,即0.25显示更多的时候比数字更高的机会,即100 – Coderrrr 2013-03-21 13:34:10

+0

@LukeWatson什么? – EaterOfCode 2013-03-21 13:34:59

+0

就像我说的那样,如果机会是100,它会在100次出现1次,如果机会是2,它会在2次出现1次它'RAND()'返回0到1之间的随机数我乘以通过'机会'然后发言,如果它是0,它将被选中,并且是'机会'是一个奇怪的名字,想不到另一个 – EaterOfCode 2013-03-21 13:39:50

如果我理解你的权利,你可能会创建在开始查询提供奖品的数组开始。

所以数组是:

{0 => prize1_id, 
1 => prize3_id, 
2 => prize4_id, 
// ...and so on 
} 

然后你可以从奖品IDS采取随机电话号码,但没有,但数组索引(键)。

如果您希望某些项目有更多机会被选中,您可以将它们添加两次。

你可以做到这一点(如果你没有太多项目)的一种方法是在阵列上创建一个ItemID的数组并使用shuffle()。然后选择前三个元素(或将此选项随机为rand()mt_rand())为您显示的数字。这样你可以选择不存在的项目。您可以更改此算法以检查库存水平,以便在您决定(可能通过codes中的新列确定要选择的项目所需的最低库存量)时不添加ItemID

要获得边缘,您可以添加一些重复的ItemID,以便您希望更频繁地选择项目。您可以在codes表中添加另一列以指示您希望包括特定项目的次数,因此最少为3(以匹配三个数字),您可以为想要的ItemID s指定较大的值该算法更经常挑选。它也有可能将0放在你不想放弃的物品上。