加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PHP-选择一个随机行,但赔率

发布时间:2021-01-26 09:35:34 所属栏目:编程 来源:网络整理
导读:我有一个行的数据集,每个行的奇数值都在1到100之间.我但愿以最有用的方法做到这一点.赔率不必然便是100. 我有一些设法. 一种) 选择整个数据集,然后将全部几率相加,并天生一个介于1和该数字之间的随机数.然后遍历数据集,从数字中减去几率,直到它为0. 我但愿将

我有一个行的数据集,每个行的’奇数’值都在1到100之间.我但愿以最有用的方法做到这一点.赔率不必然便是100.

我有一些设法.

一种)
选择整个数据集,然后将全部几率相加,并天生一个介于1和该数字之间的随机数.然后遍历数据集,从数字中减去几率,直到它为0.

我但愿将对数据库的影响降到最低,因此我思量是否只能选择所需的行.

b)

SELECT * FROM table WHERE (100*RAND()) < odds

我以为LIMIT 0,1

可是,假如项目具有沟通的概率,则只会返回之一

可能选择整个数据集并从中选择一个随机数据集…可是赔率会受到影响,由于它酿成有几率的随机数,然后是没有几率的随机数,因此,几率倾向于较高的几率(乃至更多) .

我想我可以按赔率ASC排序,然后获取整个数据集,然后行使PHP从行中随机抽取一个赔率与第一笔记录(最低)沟通的行.

好像是一个鸠拙的办理方案.

有谁有精彩的办理方案?假如不是以上哪一项最好?

最佳谜底 做一些前期事变,在表中添加一些有助于选择的列.譬喻,假设您有这些行

 X  2  
 Y  3
 Z  1

我们添加一些累积值

 Key Odds Start  End 
 X    2     0     1      // range 0->1,2 values == odds
 Y    3     2     4      // range 2->4,3 values == odds
 Z    1     5     5      // range 5->5,1 value == odds

选择开始和竣事如下.第一行的起始位置为零.后续行的开头比上一行的末了多一个.竣事是(开始赔率-1).

此刻选择一个介于0到Max(End)之间的随机数R

Select * from T where R >= T.Start and R <= T.End

假如数据库足够智慧,我们也容许以行使

 Select * from T where R >= T.Start and R <= (T.Start + T.Odds - 1)

我展望具有索引的End列也许会提供更好的机能.同样,Max(End)也许会藏在某个处所,并在须要时通过触发器举办更新.

显然,更新“开始/竣事”有一些贫困.假若有一个,这也许还不错

>表格内容不变
>或插入在某种水平上天然地有序,因此每个新行都从旧的最高行继承.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读