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

时间:2022-10-28 20:26:35

  继续回到沈老师的MYSQL颠覆实战,首先回顾下上一节课的内容,请大家会看下上节课写的存储过程。

  打开prod_clicklog表, 我们只要把日期(不含时分秒)的部分存在数据库中, 如果同一日期有相同用户点击商品,那么我们对其数值+1,否则的话,这张点击日志表会过于庞大

  下面我们将prod_clicklog表修改下:

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

  将字段clickdate 修改为 date类型,增加clicknum字段,默认为1.

  然后,我们把上一节课的存储过程sp_load_prod再修改一下:

BEGIN
SELECT * FROM prod_main WHERE prod_id = _prod_id LIMIT 1;
SET @num=FOUND_ROWS();
SET @c=0;
IF @num=1 THEN #代表商品取出成功
SELECT count(*) INTO @c FROM prod_clicklog WHERE prod_id = _prod_id AND user_ip=_user_ip AND user_id=_userid AND clickdate=CURRENT_DATE;
if @c>0 THEN #代表已经点击过,只要对clicknum累加1
UPDATE prod_clicklog SET clicknum=clicknum+1 WHERE prod_id=_prod_id AND user_ip=_user_ip AND user_id=_userid AND clickdate=CURRENT_DATE;
ELSE #新增点击日志
INSERT INTO prod_clicklog(prod_id,user_ip,user_id,clickdate) VALUES (_prod_id,_user_ip,_user_id,CURRENT_DATE);
END IF; END IF;
END

  接着我们还是新建查询,call一下 sp_load_prod(1);

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

  prod_clicklog表中的数据:

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

  然后我们多次执行上面的存储过程:

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

  OK,这个思路没有任何问题。

  这时问题来了。那么商品表中的总点击量,什么时候更新呢?  

  1、通过web语言来完成,譬如写个程序定时执行

  2、本课时要讲的是通过mysql的事件来执行.

   我们先执行下面的查询语句: 

SELECT prod_id,sum(clicknum) FROM prod_clicklog GROUP BY prod_id;

 这样就能取出一堆 id,和执行总条数

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

  于是我们写个存储过程count_prod_click,来实现游标,

BEGIN
DECLARE isend int DEFAULT 0;
DECLARE pid int; #代表商品ID
DECLARE cnum int; #代表点击量总数
DECLARE cur CURSOR FOR SELECT prod_id,sum(clicknum) from prod_clicklog GROUP BY prod_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET isend =1 ; #游标结束时令isend =1
open cur; #打开游标
FETCH cur into pid,cnum; #预先定义好的变量,取出第一行,并把内容放入预先定义好的变量
while isend !=1 DO UPDATE prod_main SET prod_click_all = cnum WHERE prod_id =pid; # 更新商品主表的总点击量
#这里可以写业务代码
FETCH cur into pid,cnum;
end while;
close cur; END

  老规矩,我们新建查询

CALL count_prod_click;

  然后刷新主表,可以看到,prod_click_all字段已经被更新

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

  最终使用mysql新建一个事件,令每隔10秒统计一下并更新

  我们先查询下mysql事件是否开启

show VARIABLES like '%event%'

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

  如果没有开启:

SET GLOBAL event_scheduler=ON;

  OK,现在我们新建一个事件 event_count_prodclick:

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

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

  然后我们根据这个延时加载在实战中合理应用。

版权声明:笔记整理者亡命小卒热爱*,崇尚分享。但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的《web级mysql颠覆实战课程 》。如需转载请尊重老师劳动,保留沈逸老师署名以及课程来源地址。

上一课:mysql颠覆实战笔记(四)--商品系统设计(一):商品主表设计

下一课:mysql颠覆实战笔记(六)--商品系统设计(三):商品属性设计之固定属性

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

  1. mysql颠覆实战笔记(三)-- 用户登录(二):保存用户操作日志的方法

    版权声明:笔记整理者亡命小卒热爱*,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...

  2. mysql颠覆实战笔记&lpar;四&rpar;--商品系统设计&lpar;一&rpar;&colon;商品主表设计

    版权声明:笔记整理者亡命小卒热爱*,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...

  3. mysql颠覆实战笔记&lpar;六&rpar;--商品系统设计&lpar;三&rpar;:商品属性设计之固定属性

    今天我们来讲一下商品属性 我们知道,不同类别的商品属性是不同的. 我们先建一个表prod_class_attr:

  4. mysql颠覆实战笔记&lpar;二&rpar;-- 用户登录&lpar;一&rpar;&colon;唯一索引的妙用

    版权声明:笔记整理者亡命小卒热爱*,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...

  5. mysql颠覆实战笔记&lpar;七&rpar;--白话理解事务

    今天我们学习web开发级mysql颠覆实战课程第9课没MYSQL事务(一):白话理解事务.前面有两节课第7讲:商品系统设计(四):商品属性设计之自定义属性,第8讲:商品系统设计(五):一维属性的商品价 ...

  6. mysql颠覆实战笔记&lpar;一&rpar;--设计一个项目需求,灌入一万数据先

    版权声明:笔记整理者亡命小卒热爱*,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...

  7. mysql颠覆实战笔记&lpar;八&rpar;--mysql的自定义异常处理怎么破

    这一节课,沈老师带我们了解事务的异常 什么是异常? 我们先插入一组数据: ,10.5); 这个是正常的.但是我们把插入的user_money的值故意弄错:如下 ,‘abc’); 那么我们会得到一个ER ...

  8. 【SSH网上商城项目实战28】使用Ajax技术局部更新商品数量和总价

         转自: https://blog.csdn.net/eson_15/article/details/51487323 昨天把项目部署了一下,玩了玩,今天完善了一下购物车中修改商品数量就能局部 ...

  9. mysql的学习笔记&lpar;五&rpar;

    1.子查询,出现在其他SQL语句的SELECT子句 SELECT * FROM t1 WHERE col1=(SELECT col2 FROM t2); 第一个SELECT称为外层查询,第二个称为子查 ...

随机推荐

  1. oracle 函数调用

    --带out的函数 create or replace function fun_try(v_name varchar,v_outname out varchar)return varchar2 is ...

  2. 编写IoDemo&period;java的Java应用程序,程序完成的功能是:首先读取text&period;txt文件内容,再通过键盘输入文件的名称为iodemo&period;txt&comma;把text&period;txt的内容存入iodemo&period;txt

    package zuoye; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep ...

  3. tomcat证书配置&lpar;来源于http&colon;&sol;&sol;my&period;oschina&period;net&sol;zhxm&sol;blog&sol;161159&rpar;

    第一步:为服务器生成证书 1.进入%JAVA_HOME%/bin目录 2.使用keytool为Tomcat生成证书,假定目标机器的域名是“localhost”,keystore文件存放在“D:\tom ...

  4. 嵌入式linux移植LAMP服务器

    一.工具准备工作  要想在ARM平台上移植一套Apache+Msql+PHP的Web型服务器. 所用物理机系统: Ubuntu 14.04 LTS(64位) 交叉编译环境:   arm-linux-g ...

  5. Excel数据导入到oracle

    打开pl/sql,如图所示界面,点击菜单栏中的T00LS     ODBC Imtorper,打开ODBC Importer选项框       在Data fromODBC页中选择需要导入的文件的格式 ...

  6. 关掉PUTTY后,进程仍可以运行。

    如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令.该命令可以在你退出帐户之后继续运行相应的进程.no hup就是不挂起的意思( no hang up).该命令 ...

  7. 【LeetCode】Binary Tree Level Order Traversal 【BFS】

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  8. 由于github仓库中提前建立readme文件,导致git push报错error&colon; failed to push some refs to &&num;39&semi;git&commat;github&period;com&colon;

    $ git push -u origin master To git@github.com:xxx/xxx.git ! [rejected] master -> master (fetch fi ...

  9. 如何打开JSP文件&sol;JS和JSP的区别&sol;Servlet的本质是什么,是如何工作的?

    一:如何打开JSP文件 1.安装JAVA 2.安装TOMCAT——免费开源的JAVAWEB服务器 3.安装ECLIPSE 二:JS和JSP区别 名字: JS:JavaScript JSP:Java S ...

  10. mysql 分组排序取最值

    查各个用户下单最早的一条记录 查各个用户下单最早的前两条记录 查各个用户第二次下单的记录 一.建表填数据: SET NAMES utf8mb4; -- 取消外键约束 ; -- ------------ ...