2011-11-20 142 views
10

我想使用PHP从我的SQL表请求5个随机行。 举例来说,我需要:从SQL选择随机行使用PHP

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

不通知恰好与相关主题的同样的问题问? –

回答

19
SELECT * FROM catalogue order by RAND() LIMIT 5 

编辑:

为了什么它的价值,请注意,在具有大量行的表中使用RAND()将是缓慢的。这可能会导致服务器崩溃。

一些解决方案:

链接到MediaWiki使用有趣的把戏(维基百科的特殊:随机功能):与物品表中有一个随机数(在创建文章时产生),一个额外的列。要获得一篇随机文章,请生成一个随机数,并获取随机数字列中的下一个较大或较小(不记得哪个)值的文章。有了索引,这可以非常快。 (和MediaWiki是用PHP和MySQL的开发。)

但是,这是只有一个随机行。

+0

这是好使用类似.. SELECT * FROM所在目录USER_TYPE = '常规' ORDER BY RAND()LIMIT 5 ???? –

+0

@GuchoCa,是的,没关系。一旦你的表大小增加,你开始注意花在这个查询上的主要时间,你将不得不想出一些方法来减少它,就像MediaWiki使用的那样。 – Pheonix

+0

你怎么样让表的长度(如检查有多少记录表中有和让我们假设500K这是一个记录的大量),那么只是随机从总选择5个号码,之后拉的5个记录从表? – Ali

5

假设表有自动递增你可以得到与

SELECT id FROM catalogue ORDER BY id DESC LIMIT 1 

最大的ID和最小的ID机智^ h

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五倍。

+0

如果该随机ID缺失,但查询将失败 – warren