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

这篇博客介绍了如何在MySQL中实现商品点击量的统计和定时更新。通过修改存储过程`sp_load_prod`和创建新的存储过程`count_prod_click`,结合事件调度器(event_scheduler)来定期更新商品主表的`prod_click_all`字段,确保商品总点击量的准确性。此外,还提到了通过Web语言定时执行和MySQL事件两种方法进行更新。
摘要由CSDN通过智能技术生成

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

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

下面我们将prod_clicklog表修改下:

d72ffbbf379f25bdffc87d980992e1d6.png

将字段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累加1UPDATE 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);

47f33e1fd50524f242feaffb3a688a5e.png

prod_clicklog表中的数据:

523f6f5fa9ececc2a8a0134df7a2a67e.png

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

747dd87de814ccca8fdb9b0e62add5f9.png

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

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

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

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

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

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

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

a4d721256778c9bbdc376ca29264ca07.png

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

BEGIN

DECLARE isend int DEFAULT 0;DECLARE pid int; #代表商品IDDECLARE cnum int; #代表点击量总数DECLARE cur CURSOR FOR SELECT prod_id,sum(clicknum) from prod_clicklog GROUP BYprod_id;DECLARE CONTINUE HANDLER FOR NOT FOUND SET isend =1 ; #游标结束时令isend =1

opencur; #打开游标FETCH cur intopid,cnum; #预先定义好的变量,取出第一行,并把内容放入预先定义好的变量while isend !=1DOUPDATE prod_main SET prod_click_all = cnum WHERE prod_id =pid; # 更新商品主表的总点击量

#这里可以写业务代码FETCH cur intopid,cnum;end while;closecur;END

老规矩,我们新建查询

CALL count_prod_click;

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

e5fe80753f5561109a544da0e2d81c00.png

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

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

show VARIABLES like '%event%'

aa0f15fa3507a08a2ec401f4f00f141a.png

如果没有开启:

SET GLOBAL event_scheduler=ON;

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

fc9eb53512c2ff20d82ec5ed0762672c.png

e7cbf02bbc6bf37c686649eb0971440c.png

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值