2010-05-05 102 views
1

我有一個查詢可以在數據庫中選擇6個名稱。例如在mySql查詢中獲取隨機值

SELECT names FROM users LIMIT 6 

現在我想這個查詢數據庫中的表中選擇一個隨機的6名,這可能嗎?而簡單,但速度慢的解決方案如何

+0

相關:http://stackoverflow.com/questions/1823306/alerternative-to-mysql-order-by-rand – 2010-05-05 19:23:58

回答

7

是:

SELECT names FROM users ORDER BY RAND() LIMIT 6 

這使用隨機數進行排序,並具有爲O(n log n)的服務表現。它應該運行良好說10000行,但對於較大的表,它不會很好地擴展。

想要更快得到它,你可以看看Quassnoi的文章MySQL: selecting a number of random rows fast

SELECT * 
FROM (
     SELECT @cnt := COUNT(*) + 1, 
       @lim := 6 
     FROM users 
     ) vars 
STRAIGHT_JOIN 
     (
     SELECT names, 
       @lim := @lim - 1 
     FROM users r 
     WHERE (@cnt := @cnt - 1) 
       AND RAND() < @lim/@cnt 
     ) i 

這具有O(n)性能。

1
SELECT names 
FROM users 
ORDER BY RAND() 
LIMIT 6 
0

這裏是一個其他快速解決方案

Select names from users WHERE RAND() LIMIT 6 
+2

這可能是快,但它不是正確。它會給你6行,但它們是*不*隨機的。 – 2010-05-05 19:44:38