2010-02-15 105 views
2

我有一个大的MySQL用户表,需要从它(我使用PHP)获得六个随机行。该表具有自动递增的索引列。唯一的问题是有些行被标记为不活动,因为有些用户已经禁用了他们的账户或者其他任何东西。这意味着我不能只对行进行计数,然后从该范围中获取一个随机数,因为其中一些数据将处于非活动状态。随机MySQL行,同时避免漏洞

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

谢谢!

+1

为什么你想避免RAND()? – 2010-02-15 06:43:44

+1

@astander:因为它慢吗? – zerkms 2010-02-15 06:57:33

回答

3
WHERE `inactive` = 0 LIMIT random_offset, 1 

其中random_offset在PHP预先计算(随机1〜活跃用户COUNT)。结果由6个UNION ed查询组成。

+0

谢谢!我完全忘记了LIMIT可能需要2个参数。 – tau 2010-02-15 06:43:20