在 MySQL 中对随机选择进行加权
处理大型数据集时,可能需要随机选择一个条目,同时考虑相关权重每个条目。在 MySQL 中,这可以通过使用函数和加权乘数的组合来实现。
要从表中选择单个条目,请使用 SELECT 语句。要随机化选择,请使用 RAND() 函数。然而,要引入权重,需要一个额外的步骤。
考虑一个包含条目的表格和代表其权重的“乘数”列。要对具有较高乘数的条目进行加权,请使用以下语法修改语句:
SELECT * FROM table_name ORDER BY -LOG(1.0 - RAND()) / Multiplier LIMIT 1;
在此表达式中,ORDER BY 子句按计算值的升序对结果进行排序。该值是通过将 0 到 1 之间的随机数的负对数除以乘数得出的。乘数较高的条目将具有较小的计算值,并且会出现在排序列表中的较早位置。然后,LIMIT 1 子句选择顶部条目作为加权随机选择。
请注意,此方法不受乘数 0 的影响,因为乘数为零仍会导致条目出现在末尾排序列表。如果需要,可以使用 WHERE 子句从选择中排除乘数为 0 的条目:
SELECT * FROM table_name WHERE Multiplier > 0 ORDER BY -LOG(1.0 - RAND()) / Multiplier LIMIT 1;
以上是如何在 MySQL 中对随机选择进行加权?的详细内容。更多信息请关注PHP中文网其他相关文章!