2011-11-15 46 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