我有一个 MySQL 表,其中包含一堆条目,以及一个名为“乘数”的列。此列的默认(也是最常见的)值为 0,但它可以是任何数字。
我需要做的是从该表中随机选择一个条目。但是,这些行是根据“乘数”列中的数字加权的。值为 0 意味着它根本没有加权。值 1 表示它的权重是两倍,就好像该条目在表中出现两次一样。值 2 表示它的权重是表的三倍,就好像条目在表中的三倍。
我正在尝试修改我的开发人员已经给我的内容,如果设置没有多大意义,非常抱歉。我可能会更改它,但希望尽可能多地保留现有的表设置。
我一直试图弄清楚如何使用 SELECT 和 RAND() 来执行此操作,但不知道如何进行加权。有可能吗?
最佳答案
This guy问同样的问题。他和弗兰克说的一样,但是权重不正确,在评论中有人建议使用 ORDER BY -LOG(1.0 - RAND())/Multiplier
,在我的测试中给出了相当不错的结果非常完美的结果。
(如果有任何数学家想解释为什么这是正确的,请赐教!但它确实有效。)
缺点是您无法将权重设置为 0 以暂时禁用某个选项,因为您最终会被零除。但是你总是可以用 WHERE Multiplier > 0
过滤掉它。
关于php - MySQL:选择随机条目,但偏重某些条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2417621/