假设我有一个带有整数字段的数据库表 - 称之为"flavor",该字段的值只能是数字1到10.
有没有办法从数据库中选择一个随机行,20%的可能性是6号味道,30%的可能性是2号味道,50%的可能性是味道1?
对迟到的回应表示歉意 - 非常感谢您的帮助.欧根的答案似乎最能涵盖我所需要的; 我知道ORDER BY rand()的危险,但我正在编写的应用程序不能在大型数据源上运行,或者必须支持许多并发用户.所以我会接受它并接受性能打击.
SELECT
IF(@rnd<0.5,1,IF(@rnd<0.8,2,6)) AS rndflavour
FROM
(SELECT @rnd:=rand()) AS rndinit;
Run Code Online (Sandbox Code Playgroud)
提供所需概率的风味。
SELECT * FROM tablename ORDER BY rand() LIMIT 1
Run Code Online (Sandbox Code Playgroud)
给您一个随机行。现在,我们将其放在一起:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2696 次 |
| 最近记录: |