php - MySQL:选择随机条目,但偏重某些条目

标签 php mysql select random database-table

我有一个 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/

相关文章:

javascript - Sequelize 两个表之间的关联

MySQL LENGTH() > 0 且 NOT NULL 未得到预期结果

php - 选择其中一列为 "val"的条目,然后是 "aaa",然后是 "ccc"

MySQL多列asc顺序

php - HTML(输入)->php->mysql->php->json->HTML 渲染

php - 多文件上传 Joomla

sql - 通过一些计算从数据库中获取前 10 名

mysql选择其中一条有n项的记录

php - 如何使用连接列导出到 csv

php - 使用 Google Analytics 在网站上显示实时用户数