`

mysql 存储过程,临时表,游标

阅读更多
CREATE DEFINER=`lifunet`@`%` PROCEDURE `proc_rank_article`(
in inter int
)
begin
     declare temp_reply_article_id int;
     declare temp_reply_total int default 0;
     declare temp_article_good int default 0;
     declare temp_article_sort int default 0;
     declare done boolean;
     --
     declare tmp_article_cur cursor for select reply_article_id from tmp_article_table;
     --
     declare continue handler for not found set done=true;    
    
     drop temporary table if exists tmp_article_table;   
     drop temporary table if exists tmp_article_static_table;
     create temporary table tmp_article_table(reply_article_id int);   
     create temporary table tmp_article_static_table(article_id int,good_click int,replyTotal int,article_sort int); 
     if(inter is not null) then
         if(inter = 0) then        
            set inter = 7;
         end if;
         if(inter = 1) then        
            set inter = 360;
         end if;
         if(inter = 2) then        
            set inter = 30;
         end if;  
         insert into tmp_article_table(reply_article_id) select reply_article_id from t_article where reply_article_id is not null and create_time >  DATE_ADD(now(), INTERVAL -inter DAY) order by create_time desc limit 10000;
         --
         start transaction;
         open tmp_article_cur;
         tmp_article_cur_loop:loop
             fetch tmp_article_cur into temp_reply_article_id;
             if done then
                 leave tmp_article_cur_loop;
             else
               if(NOT EXISTS (select article_id from tmp_article_static_table where article_id = temp_reply_article_id )) then    
                 --
                 select count(good_click) into temp_article_good from t_record where article_id=temp_reply_article_id and good_click is not null and create_time >  DATE_ADD(now(), INTERVAL -inter DAY);
                 --
                 select count(reply_article_id) into temp_reply_total from tmp_article_table where reply_article_id=temp_reply_article_id;                 
                 -- X=          
                 set temp_article_sort = temp_article_good + temp_reply_total;
                 insert into tmp_article_static_table (article_id,good_click,replyTotal,article_sort) values(temp_reply_article_id,temp_article_good,temp_reply_total,temp_article_sort);
              end if;
            end if;
         end loop tmp_article_cur_loop;
         close tmp_article_cur;      
         --
         select * from tmp_article_static_table order by article_sort desc;
         drop table tmp_article_table;
         drop table tmp_article_static_table;
         commit;    
      end if;
end;
分享到:
评论

相关推荐

    mysql复杂存储过程实例(游标、临时表、循环、递归)

    本资源结合实例实现一个复杂的存储过程,存储过程中有用到游标、临时表、循环、递归等知识,sql文件附有实例数据表创建的sql语句。

    存储过程:利用游标+临时表实现查询

    存储过程使用游标、临时表实现动态SQL查询 2020.3.24 用能第二周周二上午,任务需求:编写存储过程查询监测设备状态以及目标监测设备状态。(任务完成) 改存储过程包含了大量相关知识,特此记录,以便此后使用! 为...

    mysql存储过程之游标(DECLARE)原理与用法详解

    本文实例讲述了mysql存储过程之游标(DECLARE)原理与用法。分享给大家供大家参考,具体如下: 我们在处理存储过程中的结果集时,可以使用游标,因为游标允许我们迭代查询返回的一组行,并相应地处理每行。mysql的...

    mysql 存储过程应用(代码详解)

    详细介绍了mysql使用临时表实现强大的存储过程,怎样获得存储过程的返回值,使用了临时表,游标等方法。

    mysql存储过程优化

    mysql存储过程优化:使用临时表代替游标 ;巧建MySQL sum索引以提升效率

    mysql存储过程双层嵌套

    loop 游标双层嵌套循环 创建临时表, 游标

    mysql优化——部分

    mysql存储过程优化:使用临时表代替游标 ;巧建MySQL sum索引以提升效率

    mysql存数组的实例代码和方法

    我们可以把传入的字符串截取成多个字符然后传入到临时表中,然后使用游标或者直接关联表过滤数据。这样就可以达到后面预期的效果了。 下面我们以一个例子来具体实践一下: 1、创建数据库,用于实例: CREATE ...

    mysql数据库的基本操作语法

    视图就是一个表或多个表的查询结果,它是一张虚拟的表,因为它并不能存储数据。 视图的作用、优点: 限制对数据的访问 让复杂查询变得简单 提供数据的独立性 可以完成对相同数据的不同显示 创建、修改视图 create or...

    SQL_SERVER应用与开发范例宝典_12357672.part2

    涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、聚集函数与分组...

    SQL_SERVER应用与开发范例宝典_12357672.part1

    涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、聚集函数与分组...

    SQL应用开发范例宝典:SQL应用开发范例宝典.iso (源码光盘)

    涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、聚集函数与分组...

    SQL_SERVER应用与开发范例宝典_12357672.part3

    涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、聚集函数与分组...

    存储图数据的数据库FlockDB.zip

    这种表结构优化使得MySQL大放 异彩,并提供给我们可预测的性能。一条复杂的查询例如“我关注的人里面哪些关注了奥巴马总统”能分解成一些单用户查询(谁在关注奥巴马总统),并很快响应。数据根据节点分块,所以这些...

    30个mysql千万级大数据SQL查询优化技巧详解

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,在具体...

    Linux操作系统基础教程

    安装过程..........................................................................................................................5 第二讲 Linux基础进阶..................................................

Global site tag (gtag.js) - Google Analytics