如何在MySQL存储过程中生成5个随机数

3
如何生成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
1个回答

2
如果你的范围很小,并且有一个整数表格,那么一种朴素的方法可能会起作用:
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;

由于看起来他正在存储过程内部执行此操作,因此他可以只需在存储过程中创建一个整数表。 - Ben English
@Ben,没错。这让我感觉有点麻烦(主要是避免与临时表发生名称冲突),不如简单地添加一个支持表来补充你的存储过程。 - pilcrow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接