假设我有一个带整数字段的数据库表 - 称之为“flavor”,该字段的值只能是1到10的数字。
有没有办法从数据库中选择一个随机行,20%的可能性是6号味道,30%的可能性是味道2,50%的可能性是味道1? / p>
对迟到的回应道歉 - 非常感谢您的帮助。欧根的答案似乎最能涵盖我所需要的;我知道ORDER BY rand()的危险,但我正在编写的应用程序不能在大型数据源上运行,或者必须支持许多并发用户。所以我会接受它并接受性能打击。
答案 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