【问题标题】:Lucky Draw Concept : SQL Query to get random option based on percentage of appearance幸运抽奖概念:SQL Query 根据出现百分比获取随机选项
【发布时间】:2017-06-28 08:58:23
【问题描述】:

我正在开发一个幸运抽奖概念,如下所示

数据库中会有多个选项,我们必须根据出现的百分比来获取随机选项

数据库表如下

option_id |   option_name |  option_type | option_in_day(%) |  option_status
----------------------------------------------------------------------
1             $2 Off         2             100                 1
2             $3 Off         2             95                  1
3             $4 Off         2             95                  1
4             $5 Off         2             90                  1
5             $8 Off         2             90                  1
6             $60 Cashback   2             10                  1
7             $100 Cashback  2             5                   1
8             Umbrela        2             50                  1
9             Iphone         2             2                   1
10            International
              Tour           2             1                   1
11            Fidget 
              Spinner        2             70                  1
12            Free 
              membership     2             30                  1
13            Samsung S8     2             10                  1
14            $20 Off        2             60                  1
15            Travel Card    2             50                  1
16            Soft Toys      2             70                  1

现在从这个表中我想根据百分比得到随机的 8 个选项。

更少的百分比选项在结果中检索的机会会更少。

我在sql中尝试了随机函数,但无法达到要求。

【问题讨论】:

  • 检查这个link。你试过这个吗? SELECT * FROM table_name ORDER BY RAND() LIMIT 8
  • 我已经尝试过@Regolith,但我必须根据数据中给出的百分比来做

标签: php mysql random


【解决方案1】:

这就是你应该能够做到的方式:

set @percentage = 100 * rand();
select *
from table_name
order by table_name.percentage >= @percentage, rand()
limit 0, 8;

此查询将随机百分比存储到变量中。然后,我们按两个标准对查询进行排序。第一个标准是tablepercentage 高于或等于随机的percentage。这可以确保如果随机化的percentage 的上方和下方都有元素,那么上面的元素将是首选的。在第一个排序条件中具有相似结果的元素将被随机排序。

【讨论】:

    猜你喜欢
    • 2012-06-14
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多