pro_game_info表中type字段值如下:
gtype='即時制,角色扮演,模擬,網絡,休閒,解謎,動作,策略'
gtype='即時制,角色扮演,模擬'
需求把gtype值按照','拆分成多列模式值,即
模擬
網絡
休閒
解謎
動作
策略
動作
財務
方法如下:
CREATE DEFINER=`gtcom`@`%` PROCEDURE `pro_game_type`()
begin
DECLARE type int(6);
DECLARE i int DEFAULT 0;
-- 查詢最大','的數量
select max(length(gtype)-length(replace(gtype,',',''))) into type from pro_game_info;
-- 創建輔助表
CREATE TABLE if not exists help_game_type ( id INT(11),PRIMARY KEY (`id`));
truncate table help_game_type;
while i <type+1 do
insert into help_game_type (id) values (i);
set i =i+1;
end while;
-- 插入足夠的輔助數據
while i < type+1 do
insert into help_game_type(id) values (i); set i=i+1;
end while;
-- 統計結果展示
TRUNCATE table help_game_tmp;
INSERT into help_game_tmp(gtype,n)
select gtype,count(*) n from
(SELECT substring_index(substring_index(t.gtype,',',b.id + 1),',',- 1) as gtype
FROM pro_game_info t JOIN help_game_type b ON b.id<(LENGTH(t.gtype) - LENGTH(REPLACE(t.gtype, ',', '')) + 1) and t.gtype<>''
) as t
group by gtype ORDER BY n desc;
end