【问题标题】:How could I return 4 random rows in SQL?如何在 SQL 中返回 4 个随机行?
【发布时间】:2011-09-24 18:11:38
【问题描述】:

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

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

现在这已经足够了,因为表中的行数非常少(

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

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

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

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

【问题讨论】:

  • 您可以在 PHP 中创建随机数并选择 ID 等于该随机数的位置。

标签: php sql random


【解决方案1】:

如果你知道表的近似基数,我想你可以设置OFFSETrandomly。例如:

$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
";

不过,它的采样方法有偏差。

【讨论】:

  • 也许你最后指的是ORDER BY rand()而不是ORDER BY $limit
猜你喜欢
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 2011-03-14
  • 2017-08-04
  • 2015-10-09
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
相关资源
最近更新 更多