我怎么能在SQL中返回4个随机行?

时间:2011-09-24 18:11:39

标签: php sql random

这是我目前来自PHP的调用代码:

$getfromdb = "SELECT `myTable`.* FROM `myTable` WHERE `status`=1 and ORDER BY rand() LIMIT 4";

现在这足够了,因为表中的行数非常小(<1000)。 但是,

(a)随机性不够(意味着经常会返回一些相同的行),

(b)表的大小会迅速增加,这意味着性能会受到影响。

我怎样才能使代码更加随机和高效?

主键(id)上有一个自动增量 - 但也有漏洞。

1 个答案:

答案 0 :(得分:3)

如果您知道该表的近似基数,我认为您可以随机设置OFFSET。例如:

$cardinality = 100000;
$limit = 4;
$offset = rand(0, $cardinality - $limit);
$getfromdb = "
    SELECT * FROM (
        SELECT `myTable`.* FROM `myTable` WHERE `status` = 1
        OFFSET $offset LIMIT 500
    ) ORDER BY rand() LIMIT $limit
";

嗯,它的采样方法有偏见。