购买福彩双色球是大家一种喜闻乐见的娱乐活动,还可以高大上的说是为了公益事业献爱心,作者本身就积极热爱这项活动,截至目前的最佳战绩是1000元,今天(周四)又是双色球开奖日,拿起手机准备点击随机选号的时候,突发了我的灵机,能不能用数据库(MySQL)来实现随机双色球号码呢?说干就干!
模拟双色球那我们就模拟真实的中奖号码的产生过程。33个红球放在一个罐子里,每次产生一个,每产生一个罐子里的球就少一个,那我就设计一个表red,代表这个红球罐子:
create table red( r int(2), u char(1) default '0' );
其中r代表红球号码,u代表是否使用的意思,默认值0,未使用,1代表已使用过。
然后插入从1到33的33行数据代表红球:
insert into red(r) values(1); insert into red(r) values(2); insert into red(r) values(3); insert into red(r) values(4); insert into red(r) values(5); insert into red(r) values(6); insert into red(r) values(7); insert into red(r) values(8); insert into red(r) values(9); insert into red(r) values(10); insert into red(r) values(11); insert into red(r) values(12); insert into red(r) values(13); insert into red(r) values(14); insert into red(r) values(15); insert into red(r) values(16); insert into red(r) values(17); insert into red(r) values(18); insert into red(r) values(19); insert into red(r) values(20); insert into red(r) values(21); insert into red(r) values(22); insert into red(r) values(23); insert into red(r) values(24); insert into red(r) values(25); insert into red(r) values(26); insert into red(r) values(27); insert into red(r) values(28); insert into red(r) values(29); insert into red(r) values(30); insert into red(r) values(31); insert into red(r) values(32); insert into red(r) values(33);
篮球由于只有一个,所以就不用制作罐子了,生成一个1到16的随机数就行。准备工作结束那就开始编写SQL语句吧。呦呦呦!不巧的是MySQL的循环只能写在过程或者函数里,那我们就编写这样一个函数:
CREATE FUNCTION doublecolorball() RETURNS varchar(100) CHARSET utf8 BEGIN declare i int default 1;#定义一个循环变量 declare red int;#定义单个红球 declare redballs varchar(100);#定义红球串 update red set u='0';#开始前,将所有红球置为可用状态 while i<=6 do #循环6次 select r into red from red where u='0' order by rand() limit 1; #从红球堆里一次抽取一个 update red set u='1' where r=red;#将抽取的红球设置为已用状态 set i = i+1;#循环变量增加1,代表已经完成一次抽取红球的操作 end while;#循环体结束 select GROUP_CONCAT(r) into redballs from red where u='1';#将所有已经抽取的红球聚合成一行一列并将结果赋值给变量redballs RETURN concat('红球:',redballs,' 篮球:',cast(floor(rand()*16)+1 as char(2)));#随机从1到16抽取一个篮球并和红球串组合返回。 END;#函数体结束
上面的函数创建成功后,使用以下方法调用
select doublecolorball() 中将号码;
这样一个福彩双色球的MySQL随机函数就完成了,我们来回顾一下使用到的相关技术:
1、创建表的语句,其中字段有默认值的写法 create table;
2、插入数据的方法insert;
3、创建函数的方法、调用函数的方法create function …returns;创建函数还可以使用变量,不过本函数没必要使用变量。
4、declare定义变量并赋初值;
5、查询数据并将数据使用变量保存into;
6、update更新数据;
7、随机数函数rnad()只能随机0到1的小数,所以用一种变相方法实现1到16的随机数;
8、使用group_concat函数将单列多行数据聚合成单行单列数据。
9、调用函数的方法 select 函数();
10、mysql注释语句的写法#,注意如果函数内的注释行折行,请将其变成单行,或者注释行前面都加上#
此函数只是简单实现了随机生成号码的方法,其实还可以扩展双色球的各种复杂算法,比如和值、奇偶比、三区比等等,稍微扩展一下red表即可,那位有优秀想法可以私信联系我实现算法,共同实现大奖梦。
学习和使用此函数不一定中奖,倒是可以多多练习MySQL的SQL写法,多多实现此类具有实际意义的事情,数据库能力便会愈来愈强。
最后为啥你老是写MySQL的实现方法,不写Oracle和SQL Server了,因为MySQL方便,可以偷懒,下次把那哥俩带上!