假设我有一个带有整数字段的数据库表 - 将其称为“flavour”,并且该字段的值只能是数字 1 到 10。
有没有办法从数据库中选择一个随机行,有 20% 的几率是第六味,30% 的几率是第二味,50% 的几率是第一味?
抱歉回复晚了 - 非常感谢您的帮助。 Eugen 的回答似乎最能满足我的需要;我知道 ORDER BY rand() 的危险,但我正在编写的应用程序不会在大型数据源上运行,或者必须支持许多并发用户。所以我会接受它并接受性能损失。
最佳答案
SELECT
IF(@rnd<0.5,1,IF(@rnd<0.8,2,6)) AS rndflavour
FROM
(SELECT @rnd:=rand()) AS rndinit;
为您提供所需概率的 flavor 。
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
关于mySQL随机选择概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792426/