gpt4 book ai didi

mysql - 在MySQL中以一定的机会(权重)选择随机行

转载 作者:行者123 更新时间:2023-11-29 03:35:25 27 4
gpt4 key购买 nike

我搜索了一段时间,但结果让我很困惑,因为我对 MySQL 还很陌生。

我有一个包含这 4 列的表:AUTO_INCREMENT ID、NAME、TYPE、CHANCE 所以行看起来像这样:

1, NOTHING, NO, 35
1, VERSICOLOR, TREE, 35
3, DIVERSIPES, TREE, 35
4, AMAZONICA, TREE, 35
5, EMILIA, GROUND, 25
6, BOEHMI, GROUND, 25
7, SMITHI, GROUND, 25
8, METALLICA, SKY, 5
9, REGALIS, SKY, 5

注意:这些都是简单的例子,会有x100个类似的。我需要做的是从该表中选择一行,如 CHANCE 列中所示。

意义;我需要从其中的 9 个中选择一行,结果可以是“VERSICOLOR、DIVERSIPES、AMAZONICA 或 NOTHING 有 35% 的几率”或“EMILIA、BOEHMI 或 SMITHI 有 25% 的几率”或“METALLICA 或 REGALIS 有 %5 的几率”。所以这个查询可能会给我“VERSICOLOR、DIVERSIPES、AMAZONICA or NOTHING”的结果,因为它有 35% 的机会,或者我可能会很幸运,我会得到“METALLICA 或 REGALIS”:)

基本上有 3 组类型,GROUND,TREE 和 SKY。我想做的是从所有这些中只得到一个结果。 GROUND, TREE or SKY type item 有一定的几率但是可以肯定的是,我不想要每组一个,我只想要一个结果,它可以是 GROUND, TREE or SKY 类型的item。我希望我确实解释了自己。问候。

最佳答案

可能有一个更优雅的解决方案,并且不假设您的百分比加起来为 100 - 但这可能有效:

示例 http://sqlfiddle.com/#!2/ec699/1

SELECT *
FROM (
SELECT id, name, type, chance
, @value + 1 AS lowval
, @value := @value + chance AS hival
FROM tbl
JOIN (SELECT @value := 0) AS foo) AS bar
JOIN (SELECT FLOOR(1 + RAND()*99) AS guesser) AS bar2
ON guesser BETWEEN lowval and hival;

关于mysql - 在MySQL中以一定的机会(权重)选择随机行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22539031/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com