2011-11-20 120 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