【发布时间】:2011-11-20 07:56:29
【问题描述】:
我想使用 php 从我的 SQL 表中请求 5 个随机行。 例如,我需要:
mysql_query("SELECT * FROM catalogue >> not sure what goes here << LIMIT 5");
【问题讨论】:
-
您没有注意到相关主题与所问的问题完全相同吗?
我想使用 php 从我的 SQL 表中请求 5 个随机行。 例如,我需要:
mysql_query("SELECT * FROM catalogue >> not sure what goes here << LIMIT 5");
【问题讨论】:
SELECT * FROM catalogue order by RAND() LIMIT 5
编辑:
对于它的价值,请注意,在具有大量行的表上使用 rand() 会很慢。这实际上会使您的服务器崩溃。
一些解决方案:
MediaWiki 使用了一个有趣的技巧(用于 Wikipedia 的 Special:Random 功能):包含文章的表格有一个带有随机数的额外列(在创建文章时生成)。要获得一篇随机文章,请生成一个随机数,并在随机数列中获取具有下一个更大或更小(不记得是哪个)值的文章。使用索引,这可以非常快。 (而且 MediaWiki 是用 PHP 编写并为 MySQL 开发的。)
但这仅适用于单个随机行。
【讨论】:
假设表有 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。
【讨论】:
如果您从一个非常大的表中选择随机行,您可能需要尝试以下链接中的方法:
http://akinas.com/pages/en/blog/mysql_random_row/
注意:只是为了与大家分享其他选择
【讨论】: