【问题标题】:Select Random Row from SQL Using PHP使用 PHP 从 SQL 中选择随机行
【发布时间】:2011-11-20 07:56:29
【问题描述】:

我想使用 php 从我的 SQL 表中请求 5 个随机行。 例如,我需要:

mysql_query("SELECT * FROM catalogue >> not sure what goes here << LIMIT 5");

【问题讨论】:

  • 您没有注意到相关主题与所问的问题完全相同吗?

标签: php mysql sql


【解决方案1】:
SELECT * FROM catalogue order by RAND() LIMIT 5

编辑:

对于它的价值,请注意,在具有大量行的表上使用 rand() 会很慢。这实际上会使您的服务器崩溃。

一些解决方案:

MediaWiki 使用了一个有趣的技巧(用于 Wikipedia 的 Special:Random 功能):包含文章的表格有一个带有随机数的额外列(在创建文章时生成)。要获得一篇随机文章,请生成一个随机数,并在随机数列中获取具有下一个更大或更小(不记得是哪个)值的文章。使用索引,这可以非常快。 (而且 MediaWiki 是用 PHP 编写并为 MySQL 开发的。)

但这仅适用于单个随机行。

【讨论】:

  • 使用类似 .. SELECT * FROM catalog WHERE user_type = 'regular' order by RAND() LIMIT 5 的东西好吗????
  • @GuchoCa,是的,没问题。一旦您的表大小增长到您开始注意到在此查询中花费了大部分时间,您将不得不想出一些方法来减少这种情况,就像 MediaWiki 使用的那样。
  • 你如何获得表格的长度(比如检查表格有多少条记录,假设有 500K 这是大量记录)然后从总数中随机选择 5 个数字,然后从表中拉出这 5 条记录?
【解决方案2】:

假设表有 AUTO INCREMENT 你可以得到最大的 ID

SELECT id FROM catalogue ORDER BY id DESC LIMIT 1

和最小的ID与

SELECT id FROM catalogue ORDER BY id ASC LIMIT 1

使之成为可能

$randomId = mt_rand($smallestId, $biggestId);
$randomSql = mysql_query("SELECT * FROM catalogue WHERE id='$randomId'");

对于五行,您可以创建五次随机 ID。

【讨论】:

  • 如果随机 id 缺失,查询将失败
【解决方案3】:

如果您从一个非常大的表中选择随机行,您可能需要尝试以下链接中的方法:

http://akinas.com/pages/en/blog/mysql_random_row/

注意:只是为了与大家分享其他选择

【讨论】:

  • 这个链接失效了,最好能分享一下解决方案,因为这里是解决方案的论坛,不是分享链接的...
猜你喜欢
  • 2014-03-18
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多