MySQL-procedure小试牛刀_MySQL
程序员文章站
2022-04-29 18:12:39
...
根据spam_keyword表中的kid对word列逐行逐字分割到t表中,并且统计每个字的数量。
用了两层循环,外循环游标读行,内循环stroo++读字。
drop procedure if exists proc134f; CREATE PROCEDURE proc134f() BEGIN declare kidoo int; declare tid int; declare stroo int; declare str varchar(255); declare strlength int; declare istr varchar(3); declare istr_cnt int; declare done int;-- 游标用 declare cur_kid CURSOR for select kid from spam_keyword;-- 游标用 declare continue handler for not found set done=1;-- 游标用,据说是直达引擎的通道 set tid=0; delete from t; open cur_kid;-- 开启游标 loop1:loop-- 开启1层外循环 fetch cur_kid into kidoo; -- 从定义的范围中读取下一行并赋予 if done=1 then leave loop1;end if;-- 判断是否 found 下一行,否则跳出 select word into str from spam_keyword where kid=kidoo; set str=replace(str,' ',''); set strlength=char_length(str); set stroo=0; loop2:loop-- 2层内循环 set stroo=stroo+1; set istr=substr(str,stroo,1); select count(*) into istr_cnt from t where t=istr;-- 计数 if istr_cnt0 then update t set cnt=cnt+1 where t=istr;else set tid=tid+1; insert into t set id=tid,t=istr,cnt=1;end if; if stroo>=strlength then leave loop2;end if;end loop loop2; set done=0; end loop loop1; close cur_kid;-- 关闭游标 select * from t order by cnt desc; END;
推荐阅读
-
phpMyAdmin链接MySql错误 个人解决方案
-
mysql 一千行笔记(备份备用)
-
MySQL在command line Client下的一些命令
-
MySql5.5安装步骤及MySql_Front视图配置
-
SQLyog连接MySQL8.0报2058错误的解决方案
-
Windows 8.1下MySQL5.7 忘记root 密码的解决方法
-
MySQL的几种安装方式及配置问题小结
-
Java与MySQL时间戳传递/存储/协调问题--userLegacyDatetimeCode--userTimezone--serverTimezone
-
MYSQL替换时间(年月日)字段时分秒不变实例解析
-
Windows下MySQL5.7.18安装教程