通过游标高效的完成商品点击量的统计

1:首先需要mysql的事件支持

SHOW VARIABLES LIKE ‘event_scheduler‘;为off,则执行SET GLOBAL event_scheduler = ON;

2:建立一个商品表和一个商品点击记录表

CREATE TABLE `commodity` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`price` decimal(8,2) NOT NULL DEFAULT ‘0.00‘,
`title` varchar(20) NOT NULL DEFAULT ‘‘,
`all_click` int(11) NOT NULL DEFAULT ‘0‘,
`date` timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00‘ ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `commodity_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`commodity_id` int(11) NOT NULL DEFAULT ‘0‘,
`user_id` int(11) NOT NULL DEFAULT ‘0‘,
`num` int(11) NOT NULL DEFAULT ‘1‘,
`date` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3:通过一个存储过程来模拟商品记录的插入

input_commodity_log(IN _commodity_id INT,IN _user_id INT)#注:_commodity_id 为商品id,_user_id为用户id

BEGIN
set @num=0;
set @log_num=0;
select * from commodity where id=_commodity_id limit 1;
set @num=FOUND_ROWS();
if @num=1 THEN
SELECT count(*) INTO @log_num from commodity_log WHERE commodity_id=_commodity_id and user_id=_user_id and date=CURRENT_DATE();
if @log_num>0 THEN
UPDATE commodity_log SET num=num+1 WHERE commodity_id=_commodity_id and user_id=_user_id and date=CURRENT_DATE();

ELSE

INSERT INTO commodity_log (commodity_id,user_id,date) VALUES (_commodity_id,_user_id,CURRENT_DATE());

END IF;
END IF;

END

执行:CALL input_commodity_log(商品id,用户id)

4:再通过一个存储过程来完成点击记录插入到商品表

count_commodity()

BEGIN
DECLARE c_id INT; #定义商品id
DECLARE cnum INT;
#定义商品点击量
DECLARE isend INT DEFAULT 0; #游标状态
DECLARE cur CURSOR FOR SELECT commodity_id,SUM(num) FROM commodity_log WHERE DATE=DATE_SUB(CURDATE(),INTERVAL 1 DAY) GROUP BY commodity_id; #将结果集放进游标,并且统计前一天的数据
DECLARE CONTINUE HANDLER FOR NOT FOUND SET isend=1; #当游标结束的时候,isend为1
OPEN cur; #开启游标
FETCH cur INTO c_id,cnum; #将游标的数据赋予预先定义好的参数
WHILE isend!=1 do

UPDATE commodity SET all_click=cnum+all_click where id=c_id;

FETCH cur INTO c_id,cnum;

END WHILE;

CLOSE cur; #关闭游标

END

5:通过mysql的事件,完成每天5点统计点击量

DELIMITER $$

ALTER DEFINER=`root`@`127.0.0.1` EVENT `update_clicknum` ON SCHEDULE EVERY 1 DAY STARTS ‘2017-03-22 05:00:00‘ ON COMPLETION NOT PRESERVE ENABLE DO CALL count_commodity$$

DELIMITER ;

#备注:该方法主要用于数据量大的系统,并且统计的是前一天的商品访问数据

时间: 2024-11-10 16:59:02

通过游标高效的完成商品点击量的统计的相关文章

通过游标高效的完成商品点击量的统计功能

1:首先需要mysql的事件支持 SHOW VARIABLES LIKE 'event_scheduler':为off,则执行SET GLOBAL event_scheduler = ON; 2:建立一个商品表和一个商品点击记录表 CREATE TABLE `commodity` (`id` int(11) NOT NULL AUTO_INCREMENT,`price` decimal(8,2) NOT NULL DEFAULT '0.00',`title` varchar(20) NOT NU

mysql颠覆实战笔记(五)--商品系统设计(二):定时更新商品总点击量

继续回到沈老师的MYSQL颠覆实战,首先回顾下上一节课的内容,请大家会看下上节课写的存储过程. 打开prod_clicklog表, 我们只要把日期(不含时分秒)的部分存在数据库中, 如果同一日期有相同用户点击商品,那么我们对其数值+1,否则的话,这张点击日志表会过于庞大 下面我们将prod_clicklog表修改下: 将字段clickdate 修改为 date类型,增加clicknum字段,默认为1. 然后,我们把上一节课的存储过程sp_load_prod再修改一下: BEGIN SELECT

redis实现点击量/浏览量

java+redis实现高性能新闻点击量更新 1.redis简单介绍.它用来做高性能数据存取 是极好的. 2.实例:新闻点击量. 1)每次刷新,我们并不一定要往数据库里面立即更新数据 2)可以在redis里面做key-value存储 3)设置一个阀值,当用户刷新到一定数量时才更新到数据库中 3.本课时在windows下部署. 4.linux部署 后面也会讲到 课程地址 :http://edu.51cto.com/index.php?do=lesson&id=42104 -------------

python通过代理刷网页点击量

python通过代理刷网页点击量 更新异常处理情况 @time 2013-0803 更新循环里计数问题和随机等待时间问题 #!/usr/bin/python #-*- coding:utf-8 -*- ''' 此脚本主要实现网页的点击量,除了实现次功能点外,还有三个知识点: 1.随机获取代理ip,通过代理ip访问指定站点,其目的是防止ip被封 2.访问一个页面后,随机休息几秒,再访问,其目的是防止网站前面有4-7层过滤设备拦截 3.修改http的user agent字段,有些网站和4-7层设备会

JavaWeb-Servlet技术的监听器-解析与实例-网站在线用户信息与网页点击量

转载请注明出处: http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 在Web项目中,我们对下面这几个监听器必须熟练的使用,它们的作用真的很大.熟练的使用后,可以使我们少绕弯路,少写很多代码. 事件源 监听对像的创建和销毁 监听对像上属性的添加和删除 HttpSession HttpSessionListener HttpSessionAttributeListener - HttpSessionEvent ServletRequest Servl

如何让dedecms文章点击量增加一定的数值

用dedecms建站都知道有一个文章点击量这个参数,我们可不可以用这个浏览量做些延伸扩展呢?比如加上一个固定值变成另外一个指标.很多朋友已经想到了,如下图,我们将本文浏览量286设为点击量,加上300000得到的结果为全站总浏览量300286,感觉有点邪恶.只是打比方,大家不要去作恶哈.那么如何让dedecms文章点击量增加一个固定值呢? ytkah找到了一个方法,对,就直接用下面的代码进行调用 {dede:field.click runphp="yes"}@[email protec

如何修改帝国cms文章点击量默认值和成倍增加

我们在帝国cms发布完文章,在不点击的情况下,“点击量”默认显示为0,请问有什么方法,修改关注默认值吗?这个可以在增加信息时,“特殊属性”标签里修改点击量,如下图 有朋友问有没其他好的方法快速增加.成倍增加?打开e\public\ViewClick\index.php文件,找到 $usql=$empire->query("update {$dbtbpre}ecms_".$cr['tbname']." set onclick=onclick+1 where id='$id

phpcms v9文章页调用点击量方法

1.在页面加载" 2.调用统计点击的标签:: 3.最后,在写上这一句:" phpcms v9增加文章随机点击数的方法 找到文件count.php(网站根目录/api) 查找第50行,找到这段代码$views = $r['views'] + 1;这里的1是默认的,表示每浏览一次,点击量增加一次,我们可以修改成自己想要的任意数字 或者$views = $r['views'] + rand(10,100);  随机的增加 10到100之间的一个任意的整数 Phpcms v9 实现首页,列表页

Python一日一练05----怒刷点击量

功能 自己主动获取CSDN文章列表,并对每篇文章添加点击量. 源代码 import urllib.request import re import time import random from bs4 import BeautifulSoup p = re.compile('/a359680405/article/details/........') #自己的博客主页 url = "http://blog.csdn.net/a359680405" #使用build_opener()是