【问题标题】:Random MySQL row while avoiding holes随机 MySQL 行,同时避免漏洞
【发布时间】:2011-01-16 21:17:29
【问题描述】:

我有一个大的 MySQL 用户表,需要从中获取六个随机行(我正在使用 PHP)。该表有一个自动递增的索引列。唯一的问题是某些行被标记为非活动,因为一些用户禁用了他们的帐户或其他什么。这意味着我不能只计算行数,然后从该范围内获取一个随机数,因为其中一些将处于非活动状态。

如何在不使用 RAND() 且不尝试查询非活动用户的情况下有效地获取随机行?

谢谢!

【问题讨论】:

  • 为什么要避免使用 RAND()?

标签: php mysql random scalability


【解决方案1】:
WHERE `inactive` = 0 LIMIT random_offset, 1

其中random_offset 是在 PHP 中预先计算的(从活跃用户的 1 到 COUNT 随机)。结果由 6 个UNIONed 查询组成。

【讨论】:

  • 谢谢!我完全忘记了 LIMIT 可以采用 2 个参数。
【解决方案2】:

如果您希望通过 RAND() 方法避免非常慢的排序,这里有各种替代方案,以及管理漏洞的各种选项

quick selection of a random row from a large table in mysql

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2011-10-16
    • 2021-09-09
    相关资源
    最近更新 更多