mySQL随机选择概率

时间:2012-01-09 17:20:13

标签: mysql sql

假设我有一个带整数字段的数据库表 - 称之为“flavor”,该字段的值只能是1到10的数字。

有没有办法从数据库中选择一个随机行,20%的可能性是6号味道,30%的可能性是味道2,50%的可能性是味道1? / p>


对迟到的回应道歉 - 非常感谢您的帮助。欧根的答案似乎最能涵盖我所需要的;我知道ORDER BY rand()的危险,但我正在编写的应用程序不能在大型数据源上运行,或者必须支持许多并发用户。所以我会接受它并接受性能打击。

2 个答案:

答案 0 :(得分:4)

SELECT
  IF(@rnd<0.5,1,IF(@rnd<0.8,2,6)) AS rndflavour
FROM
  (SELECT @rnd:=rand()) AS rndinit;

根据所要求的概率给你味道。

SELECT * FROM tablename ORDER BY rand() LIMIT 1

为您提供一个随机行。现在我们把它放在一起:

SELECT
  tablename.*
FROM
  tablename
  INNER JOIN (
    SELECT
      IF(@rnd<0.5,1,IF(@rnd<0.8,2,6)) AS rndflavour
    FROM
      (SELECT @rnd:=rand()) AS rndinit
  ) AS rndview ON rndview.rndflavour=tablename.flavour
ORDER BY rand()
LIMIT 1

答案 1 :(得分:0)

我建议分开任务

1    写一些逻辑,为变量赋值:your_flavour,具有适当的机会

2

select * from YOUR_TABLE where FLAVOUR = :your_flavour order by rand() limit 1