日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2025/3/15 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql颠覆实战笔记(五)--商品系统设计(二):定时更新商品总点击量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  繼續回到沈老師的MYSQL顛覆實戰,首先回顧下上一節課的內容,請大家會看下上節課寫的存儲過程。

  打開prod_clicklog表,?我們只要把日期(不含時分秒)的部分存在數據庫中,?如果同一日期有相同用戶點擊商品,那么我們對其數值+1,否則的話,這張點擊日志表會過于龐大

  下面我們將prod_clicklog表修改下:

  

  將字段clickdate 修改為 date類型,增加clicknum字段,默認為1.

  然后,我們把上一節課的存儲過程sp_load_prod再修改一下:

BEGINSELECT * 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);

  

  prod_clicklog表中的數據:

  

  然后我們多次執行上面的存儲過程:

  

  OK,這個思路沒有任何問題。

  這時問題來了。那么商品表中的總點擊量,什么時候更新呢?  

  1、通過web語言來完成,譬如寫個程序定時執行

  2、本課時要講的是通過mysql的事件來執行.

   我們先執行下面的查詢語句: 

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

 這樣就能取出一堆 id,和執行總條數

   

  于是我們寫個存儲過程count_prod_click,來實現游標,

BEGINDECLARE isend int DEFAULT 0;DECLARE pid int; #代表商品IDDECLARE 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 =1open cur; #打開游標FETCH cur into pid,cnum; #預先定義好的變量,取出第一行,并把內容放入預先定義好的變量while isend !=1 DOUPDATE 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新建一個事件,令每隔10秒統計一下并更新

  我們先查詢下mysql事件是否開啟

show VARIABLES like '%event%'

  

  如果沒有開啟:

SET GLOBAL event_scheduler=ON;

  OK,現在我們新建一個事件 event_count_prodclick:

  

  

?

?  然后我們根據這個延時加載在實戰中合理應用。

?

版權聲明:筆記整理者亡命小卒熱愛自由,崇尚分享。但是本筆記源自www.jtthink.com(程序員在囧途)沈逸老師的《web級mysql顛覆實戰課程 》。如需轉載請尊重老師勞動,保留沈逸老師署名以及課程來源地址。

上一課:mysql顛覆實戰筆記(四)--商品系統設計(一):商品主表設計

下一課:mysql顛覆實戰筆記(六)--商品系統設計(三):商品屬性設計之固定屬性

轉載于:https://www.cnblogs.com/xz1024/p/5738999.html

總結

以上是生活随笔為你收集整理的mysql颠覆实战笔记(五)--商品系统设计(二):定时更新商品总点击量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。