广州 科技网站建设公司有效的网络推广
我article表中的记录如下,因为多个关键词存放在一个字段上,不利于做排序统计操作,例如我想要统计哪个关键词的数量最多就是个大问题了:
id keywords
1 九阳神功,万川归海,横扫千军,乾坤大挪移
2 杀破狼,落日十三剑
3 紫霞神功,葵花宝典,寒冰真气
将关键词中用中文逗号分开的,改成英文输入下的逗号
update article set keywords =(replace(keywords,',',','));
新建一个临时表,用来存放分隔后的关键词
drop table if exists temp_keys;
create temporary table temp_keys(
id int(10) primary key auto_increment,
keystr varchar(255)
);
新建一个自定义函数mysql_explode,将"独孤九剑,万剑归宗,乾坤大挪移"这样的字符串以逗号为分隔符以多条记录的形式存入数据库
等同于一下子完成了如下操作:
insert into temp_keys values(null,'独孤九剑');
insert into temp_keys values(null,'万剑归宗');
insert into temp_keys values(null,'傲寒六决');
自定义函数如下:
drop functionif exists mysql_explode;
delimiter $$
create function mysql_explode( instr varchar (255)) returns varchar (11)
begin
declare str varchar(255);
declare temp_s varchar(255);
declare pos intdefault0;
set str=instr;
while length(str)>1do
set temp_s = substring_index( str,',',1);
set pos= instr(str,',');
set str = substr( str, pos+1);
insert into temp_keys values (null,temp_s);
if(pos=0)then
set str='';
endif;
endwhile;
return'';
end $$
delimiter ;
调用一下 select mysql_explode("九阳神功,万川归海,横扫千军,乾坤大挪移");
temp_keys表中果然有了四条记录,一切ok,article表中第一条记录的关键词"九阳神功,万川归海,横扫千军,乾坤大挪移",被分开后变成四条记录存入了temp_keys表.之后的操作无非就是把我article表中每个keywords字段调用一下mysql_explode方法,当数据都打散到临时表里了,要做排序和统计直接操作临时表就行了.
说明一下:
instr() 函数 获取子串第一次出现的索引,如果没有找到,则返回0(从1开始),如果连这个函数都没有的话,那就得自己写一个获取指定字符位置的方法了,mysql自定义函数还真是奇怪,非要弄个返回值,所以上面的例子返回了空字符串,下次改良为存储过程,实现更复杂一些的功能.