2009-12-17 66 views
0

如何形成一個查詢來選擇'm'行隨機地從一個查詢結果有'n'行mysql隨機行

for ex;從具有50行

我試着像如下查詢結果 5行,但它的錯誤

select * from (select * from emp where alphabet='A' order by sal desc) order by rand() limit 5; 

ü可以想一想,爲什麼他需要子查詢,我需要從一組頂部的5個不同的名字50由內部查詢產生。

回答

1
SELECT * FROM t 
ORDER BY RAND() LIMIT 5 

或從您的查詢結果:

SELECT * FROM (SELECT * FROM t WHERE x=y) tt 
ORDER BY RAND() LIMIT 5 
+0

第二查詢結果的錯誤如下: ERROR 1248(42000):每一個派生表必須有它自己的別名 – ArK 2009-12-17 11:22:17

+1

剛閉幕後添加 'some_name'(不帶引號)parenthese – 2009-12-17 11:42:10

+0

注意'ORDER BY RAND()'當行數變大時變得昂貴 – 2009-12-17 11:44:09

1

這會給你爲 'M'(限制)

TRUNCATE((RAND()*50),0); 

...替代50與正使用的數字。
要檢查它嘗試以下操作:

SELECT TRUNCATE((RAND()*50),0); 

我應該警告說,這可能是一個結果返回0,這是正確的嗎?

例如,你可以做這樣的事情:

SELECT COUNT(*) FROM YOUR_TABLE 

...並把結果保存在一個名爲totalRows例如變量。那麼你可以這樣做:

SELECT * FROM YOUR_TABLE LIMIT TRUNCATE((RAND()*?),0); 

你在哪裏替換'?'與totalRows變量,根據您使用的技術堆棧。
現在更清楚了嗎?如果不是,請在您的問題中添加更多信息。

+0

對不起,我不明白你的解決方案。可以告訴我更多請 – ArK 2009-12-17 11:29:47

+0

編輯,看看它是否更清晰 – 2009-12-17 11:35:59