回答編集履歴
2
調整
test
CHANGED
@@ -25,3 +25,53 @@
|
|
25
25
|
```SQL
|
26
26
|
select rnd(6);
|
27
27
|
```
|
28
|
+
|
29
|
+
# 調整
|
30
|
+
ちょっとランダムの精度を上げてみました。
|
31
|
+
同じコードを次に引き渡していくとランダム性はあがるかも
|
32
|
+
```SQL
|
33
|
+
create table tbl (id int primary key auto_increment,val varchar(6));
|
34
|
+
|
35
|
+
drop procedure if exists set_blank;
|
36
|
+
delimiter //
|
37
|
+
create procedure set_blank(in n int)
|
38
|
+
begin
|
39
|
+
set @sql:=concat('insert into tbl(val) values(\'\')',repeat(',(\'\')',n-1));
|
40
|
+
prepare stmt from @sql;
|
41
|
+
execute stmt;
|
42
|
+
end
|
43
|
+
//
|
44
|
+
delimiter ;
|
45
|
+
|
46
|
+
drop function if exists str_shuffle;
|
47
|
+
delimiter //
|
48
|
+
create function str_shuffle(t text)
|
49
|
+
returns text
|
50
|
+
begin
|
51
|
+
set @txt=t;
|
52
|
+
set @ret='';
|
53
|
+
set @pos=0;
|
54
|
+
set @u=length(t);
|
55
|
+
WHILE @u > 0
|
56
|
+
do
|
57
|
+
set @pos=1 + floor(rand() * @u);
|
58
|
+
set @ret = concat(@ret,mid(@txt,@pos,1));
|
59
|
+
set @txt = concat(left(@txt,@pos-1),mid(@txt,@pos+1,@u));
|
60
|
+
set @u=@u-1;
|
61
|
+
end while;
|
62
|
+
return @ret;
|
63
|
+
end
|
64
|
+
//
|
65
|
+
delimiter ;
|
66
|
+
```
|
67
|
+
```SQL
|
68
|
+
call set_blank(60000);
|
69
|
+
set @a:='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
70
|
+
update tbl set val=substr(@a:=str_shuffle(@a),1,6);
|
71
|
+
```
|
72
|
+
それでもいくつかはだぶりますけど
|
73
|
+
```SQL
|
74
|
+
select val,count(*) as cnt from tbl group by val
|
75
|
+
order by cnt desc
|
76
|
+
```
|
77
|
+
|
1
調整
test
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
56,800,235,584通りを想定しているということは同じ文字が2度でてもよいという認識ですかね?
|
1
|
+
56,800,235,584通りを想定しているということは同じ文字が2度でてもよいという認識ですかね?(56,800,235,584=62の6乗)
|
2
|
-
56,800,235,584=62の6乗
|
3
2
|
まずファンクションを作って
|
4
3
|
```SQL
|
5
4
|
drop function if exists rnd;
|
@@ -7,11 +6,11 @@
|
|
7
6
|
create function rnd(n int)
|
8
7
|
returns varchar(255) DETERMINISTIC
|
9
8
|
begin
|
10
|
-
set @a="";
|
11
|
-
set @b=1;
|
12
9
|
if n>255 then
|
13
10
|
set @a=null;
|
14
11
|
else
|
12
|
+
set @a="";
|
13
|
+
set @b=1;
|
15
14
|
while @b<=n
|
16
15
|
do
|
17
16
|
set @a:=concat(@a,substring('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',ceil(rand() * 62),1));
|