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;
分享到:
相关推荐
本资源结合实例实现一个复杂的存储过程,存储过程中有用到游标、临时表、循环、递归等知识,sql文件附有实例数据表创建的sql语句。
存储过程使用游标、临时表实现动态SQL查询 2020.3.24 用能第二周周二上午,任务需求:编写存储过程查询监测设备状态以及目标监测设备状态。(任务完成) 改存储过程包含了大量相关知识,特此记录,以便此后使用! 为...
本文实例讲述了mysql存储过程之游标(DECLARE)原理与用法。分享给大家供大家参考,具体如下: 我们在处理存储过程中的结果集时,可以使用游标,因为游标允许我们迭代查询返回的一组行,并相应地处理每行。mysql的...
详细介绍了mysql使用临时表实现强大的存储过程,怎样获得存储过程的返回值,使用了临时表,游标等方法。
mysql存储过程优化:使用临时表代替游标 ;巧建MySQL sum索引以提升效率
loop 游标双层嵌套循环 创建临时表, 游标
mysql存储过程优化:使用临时表代替游标 ;巧建MySQL sum索引以提升效率
我们可以把传入的字符串截取成多个字符然后传入到临时表中,然后使用游标或者直接关联表过滤数据。这样就可以达到后面预期的效果了。 下面我们以一个例子来具体实践一下: 1、创建数据库,用于实例: CREATE ...
视图就是一个表或多个表的查询结果,它是一张虚拟的表,因为它并不能存储数据。 视图的作用、优点: 限制对数据的访问 让复杂查询变得简单 提供数据的独立性 可以完成对相同数据的不同显示 创建、修改视图 create or...
涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、聚集函数与分组...
涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、聚集函数与分组...
涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、聚集函数与分组...
涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、聚集函数与分组...
这种表结构优化使得MySQL大放 异彩,并提供给我们可预测的性能。一条复杂的查询例如“我关注的人里面哪些关注了奥巴马总统”能分解成一些单用户查询(谁在关注奥巴马总统),并很快响应。数据根据节点分块,所以这些...
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id ...
日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,在具体...
安装过程..........................................................................................................................5 第二讲 Linux基础进阶..................................................