基于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来检查是否存储了一个代码,是否给出它以及是否不给予奖励或给予默认奖励。
但是,这将意味着更多的代码我有库存的机会较高,他们有报错,我不希望我真的希望它是使用预定义的赔率完全公平..
所以希望所有有道理它不是一个过于复杂的问题,但我觉得挺不寻常的一个
感谢您的阅读,我期待着听到您的想法
卢克
扫描你的问题,我想你需要至改变你的查询
$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 = FLOOR(RAND()* chance)'。它似乎影响数据库,并使项目具有较低的机会值,即0.25显示更多的时候比数字更高的机会,即100 – Coderrrr 2013-03-21 13:34:10
@LukeWatson什么? – EaterOfCode 2013-03-21 13:34:59
就像我说的那样,如果机会是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放在你不想放弃的物品上。
真的很有趣的问题:)我很好奇其他答案。 – EaterOfCode 2013-03-21 13:24:46
我希望您有适当的许可证可以在您所在的国家/地区运行博彩网站 – mensi 2013-03-21 20:45:10