2011-11-15 81 views
3

如何生成5個唯一的隨機數?如何在mysql存儲過程中生成5個隨機數

現在我有類似

declare v_counter integer; 
declare v_random integer; 
declare v_result varchar(10); 

select FLOOR(1+(rand()*50)) into v_result; 
set v_counter=0; 
while v_counter < 4 then 
    select FLOOR(1+(rand()*50)) into v_random; 
    set v_result = concat(v_result,'|',v_random; 
    v_counter = v_counter + 1; 
end while; 

結果可能是這樣的:

12|22|3|46|3 

的數字必須是唯一的和分頁,它看起來像:

1|2|3|4|5 

任何想法?

+1

這是一個典型的「你不知道爲什麼你使用SQL」 - 的情況。不過我有點喜歡它,因爲它的mysql不好使;-) – stefan

回答

2

如果你的範圍小,和你有一個integers table,一個天真的做法可能的工作:

SELECT GROUP_CONCAT(i SEPARATOR '|') 
    FROM ( SELECT i 
      FROM ( SELECT i 
         FROM integers 
        WHERE i BETWEEN 1 AND 50 
        ORDER BY RAND() 
        LIMIT 5) sort_these_five 
     ORDER BY i) concat_these_five; 
+0

,因爲它看起來像是從一個存儲過程中完成它,然後他可以創建一個整數表作爲存儲過程的一部分。 –

+0

@Ben,真的。這讓我覺得有點麻煩(主要是避免與臨時表名稱衝突),而不是簡單地添加支持表來補充存儲過程。 – pilcrow