使用PHP从SQL中选择Random Row

时间:2011-11-20 07:56:30

标签: php mysql sql

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

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

3 个答案:

答案 0 :(得分:21)

SELECT * FROM catalogue order by RAND() LIMIT 5

编辑:

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

一些解决方案:

MediaWiki使用了一个有趣的技巧(对于维基百科的特殊:随机特征):带有文章的表格有一个带有随机数的额外列(在创建文章时生成)。要获得一篇随机文章,请生成一个随机数,并获得随机数列中下一个更大或更小(不记得哪个)值的文章。使用索引,这可以非常快。 (MediaWiki是用PHP编写的,是为MySQL开发的。)

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

答案 1 :(得分:5)

假设桌子上有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。

答案 2 :(得分:3)

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

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

注意:只是与大家分享其他选项