`
xiejin2008
  • 浏览: 125455 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

集成MySQL的自定义函数,存储过程,游标应用,实现分词功能和统计功能.

阅读更多

使用MySQL中的函数,存储过程,游标,来实现,数据库里分词并且统计的功能。

 

先看功能效果:

一个表的结构与数据内容

 

            有这么一个tempic表,其中有个字段  是keyword.这个字段的数据是用“,” 或者“,”隔开的. 现在我们实现的功能是将keyword中的数据,根据逗号“,”把她分开。并且统计相同分割后的词语的filedowntime的和.

 

举个例 :

   id=1的数据,keyword是 宝宝,可爱,熊

   id=6的数据,keyword是 可爱,宝宝,啊啊.

   id=2的数据,keyword是 啊啊,宝宝,可爱.

   则我们需要分别得到词语 "宝宝", "可爱",   "熊", "啊啊"  并且得到"宝宝"的filedowntime的次数是:12+232+233 .

而 "熊"的filedowntime的次数是:12    .

等等....

 

我们把分离后的词语以及统计的filedowntime的数据, 添加到另外一个表里去.

 

表的结构如右图:

 

 

 

接下来.看张图表现出具体效果.

分词结果

 

 

 

               

  现在展现表,实际上是temptable1的数据内容.说明已经分词成功.

 

 下面具体说明怎么实现该功能.

 

如果上图.我们用到了一个存储过程.两个方法.

分别是:sp_split_result,func_get_split_string,

func_get_split_string_total

 

 

下面贴出来SQL:

函数:  func_get_split_string

DELIMITER $$

DROP FUNCTION IF EXISTS  `func_get_split_string`$$

CREATE FUNCTION `func_get_split_string`(f_string  VARCHAR(50), f_delimiter VARCHAR(5), f_order INTEGER(11)) RETURNS varchar(50)
begin
declare result varchar(25) default '';
declare str_key varchar(25) default '';
set str_key = f_string ;
set result=reverse(substring_index(reverse(substring_index(str_key,f_delimiter,f_order)),f_delimiter,1));
return result;
end$$

DELIMITER ;

 表达的效果即下图:

效果1

 

如上图所示:我们传一个f_string参数: a, b , d, c  。 用 “,” 逗号 分割.  f_order 代表,取得第"二"个词语.

 

下面介绍:func_get_split_string_total 函数

 

SQL 代码:

DELIMITER $$

DROP FUNCTION IF EXISTS `func_get_split_string_total`$$

CREATE FUNCTION `func_get_split_string_total`(f_string VARCHAR(50), f_delimiter VARCHAR(5)) RETURNS int(11)
return 1+(length(f_string)-length(replace(f_string,f_delimiter,'')))$$

DELIMITER ;

 

 她表达的功能如右图:

效果2

 

 即:我们传人参数f_string : a, b , c , d ,s   参数f_delimiter 即: "," 返回出结果是: 5,即说明用“,” 分割f_string可以得到5个词语.

 

重点介绍:存储过程.sp_split_result

SQL:

 

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_split_result`$$

CREATE PROCEDURE `sp_split_result`( IN f_delimiter VARCHAR(5))
BEGIN
  declare cnt int default 0 ; 
  declare i int default 0 ;
  declare f_string VARCHAR(50) default '';
  declare down_sum int   default 0;
  declare temp_sum int   default 0;
  declare f_tempkey varchar(50) default '';
  declare cur_1 CURSOR FOR select replace(keyword,',',',') 'keyword' ,sum(filedowntime) 'sum1' from temppic where keyword <> '' and keyword not like '%null%' group by keyword order by 'sum1' desc ;
  DECLARE CONTINUE HANDLER FOR NOT FOUND set f_string=null;
  open cur_1;
   delete from temptable1;
   fetch cur_1 into f_string , down_sum  ;
     while (f_string is not null) do 
         set  cnt = func_get_split_string_total(f_string,f_delimiter);#获得字符串总数。
         while i<cnt  do
           set i=i+1; 
	   set f_tempkey =func_get_split_string(f_string,f_delimiter,i);#获得分割后的单个词语
           select count(1) into temp_sum from temptable1 where tempkey= f_tempkey;#判断关键词语时候已经在temptable1表中出现啦.
	    if temp_sum=0 then
		   insert into temptable1(tempkey,downcount) values (f_tempkey,down_sum);
	     else if temp_sum<>0 then
	  	   update temptable1 set downcount= downcount+down_sum where tempkey=f_tempkey;
	     end if;
            end if;
         end while;
        fetch cur_1 into f_string ,down_sum;
         set i=0; #记得一个循环之后,将i 清零. 循环是指形如 "a,b,c" .这样的一个词语,产生了3次循环.
      end while;
  close cur_1;
  select tempkey, downcount from temptable1 order by downcount desc ; 
END$$

DELIMITER ;

 

select replace(keyword,',',',') 'keyword' ,sum(filedowntime) 'sum1' from temppic where keyword <> '' and keyword not like '%null%' group by keyword order by 'sum1' desc ;

  

 这句代码为目标查询结果,我们将keyword中的","全部替换成了 "," 。为了下面的程序更好的调用.

 

好了就这样啦..over ..也是自己摸索出来的。贴出来.希望以后在其中会有新的突破.

 

1
0
分享到:
评论

相关推荐

    mysql函数、存储过程、触发器、游标.doc

    MySQL是世界上最流行的开源关系型数据库管理系统之一,它包含多种功能,如函数、存储过程、触发器和游标,这些功能极大地增强了数据库管理的灵活性和效率。以下是对这些概念的详细解释: 1. **MySQL函数**:MySQL...

    自定义函数、存储过程和触发器.pdf

    ### 自定义函数、存储过程和触发器 #### 9.1 自定义函数 ...通过学习自定义函数、存储过程和触发器的概念、用途及创建方法,可以更好地利用SQL Server的强大功能,提高数据库应用程序的性能和可靠性。

    MySQL实验报告5(存储过程与函数)(1)(1).pdf

    根据提供的文件内容,本篇实验报告主要围绕MySQL数据库中存储过程和函数的应用,涵盖了创建存储过程、函数、游标以及异常处理等高级特性。下面将详细解析报告中的每个知识点。 1. 创建存储过程 存储过程是一种在...

    Mysql存储过程游标触发器

    Mysql存储过程游标触发器

    Oracle游标视图和自定义函数

    ### Oracle游标、视图和自定义函数 #### 1. 游标 **1.1 游标的优势和类型** 在数据库应用开发过程中,游标作为一种强大的工具,为开发者提供了一种处理从表中检索出的数据的有效方法,特别是在需要逐条处理数据...

    Oracle存储过程、游标、函数的详解

    ### Oracle存储过程、游标、函数的详解 #### 一、概述 在Oracle数据库中,存储过程、游标和函数是非常重要的组成部分,它们为数据库管理提供了强大的编程能力。通过学习这些概念,我们可以更加灵活地管理和操作...

    Oracle存储过程游标详解

    Oracle 存储过程游标是指在 Oracle 数据库中使用游标来实现对结果集的处理和操作。游标可以分为静态游标和REF游标两种类型。静态游标是指结果集已经确实(静态定义)的游标,可以进一步分为隐式游标和显示游标。隐式...

    mysql存储过程_游标_项目练习

    MySQL存储过程是数据库管理系统中一组为了完成特定功能的SQL语句集,它可以被保存和重复使用,提高了数据库的效率和可维护性。在本项目实践中,我们将深入学习和运用MySQL的存储过程,同时结合游标这一重要工具进行...

    sql存储过程和游标的运用

    在本节中,我们将详细介绍存储过程和游标的基本概念和应用。 什么是存储过程 存储过程是一个预编译的SQL语句集合,它可以根据需要多次执行,以提高数据库的性能和安全性。存储过程可以接受输入参数,并根据这些...

    oracle 的函数、存储过程、游标、简单实例

    Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和灵活性使其在企业级应用中占据了重要地位。本主题将深入探讨Oracle中的几个核心概念:函数、存储过程、游标以及简单的实例,这些都是数据库管理员和...

    第11章MySQL存储过程与函数.docx

    1. 存储过程增强了 SQL 语言的功能和灵活性。 2. 存储过程能实现较快的执行速度。 3. 存储过程允许标准组件是编程。 4. 存储过程能过减少网络流量。 5. 存储过程可被作为一种安全机制来充分利用。 查看存储函数状态...

    Mysql游标(循环操作)

    在MySQL中,游标是一种数据库对象,主要用于处理存储过程中的结果集。游标允许我们逐行地读取查询结果,这对于需要对每一行数据执行特定操作的情况非常有用。通过使用游标,我们可以实现更加灵活的数据处理逻辑。 #...

    mysql存储过程之返回多个值的方法示例

    首先,我们要明白在MySQL中,存储函数只能返回一个单一的值,而存储过程则可以处理更复杂的情况,包括返回多个值。要实现这一功能,我们需要使用INOUT或OUT参数。IN参数用于向存储过程传递输入值,而出参(OUT或IN...

    sql 存储过程常用函数及游标用法

    在SQL中,存储过程是一种预编译的SQL...通过熟练掌握这些函数和命令,可以编写出复杂的存储过程,实现更高效的数据处理和管理。在实际工作中,理解并灵活运用这些知识对于优化数据库性能和编写高效的SQL代码至关重要。

    存储过程和游标

    以上示例展示了如何使用SQL语言中的存储过程和游标功能来实现特定的数据处理任务。通过这两个示例,我们可以看到存储过程的灵活性以及游标处理多行数据的强大能力。这些技术在实际开发中非常有用,能够帮助开发者更...

    mysql游标存储过程例子

    根据提供的文件信息,本文将详细解释一个MySQL存储过程的例子,其中包含了游标的使用。这个存储过程主要用于处理一批数据,涉及到日期范围内的数据处理、异常处理等。下面将逐一解析存储过程中涉及的重要知识点。 #...

    游标和存储函数.docx

    在MySQL数据库中,游标和存储函数是两个重要的概念,它们在处理复杂的数据操作和流程控制时发挥着关键作用。游标允许我们逐行处理结果集,而存储函数则可以封装一系列的SQL操作,便于重复调用和复用。 1. 游标...

    SqlServer存储过程游标

    ### SqlServer 存储过程与游标应用实例详解 #### 一、存储过程概述 在SQL Server中,存储过程是一种预编译的SQL语句集合,它可以被当作一个单独的对象来调用。存储过程可以提高应用程序性能,简化复杂的业务逻辑,...

    游标 存储过程游标 存储过程.doc

    游标和存储过程是数据库管理系统中的重要概念,主要用于处理复杂的查询和事务操作。游标允许用户在结果集中逐行处理数据,而存储过程则是一组预...在设计和实现复杂的数据库应用时,理解和掌握这些技术是至关重要的。

    MySQL系列—-创建存储函数、游标的使用

    MySQL数据库允许用户自定义存储函数和使用游标来处理数据,这两个特性对于复杂的数据操作尤其有用。在这篇文章中,我们将深入探讨如何创建存储函数以及如何利用游标进行数据查询。 ### 创建存储函数 存储函数与...

Global site tag (gtag.js) - Google Analytics