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颠覆实战笔记(五)--商品系统设计(二):定时更新商品总点击量的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 常见的布局实现,以及响应式布局技巧。
 - 下一篇: bestcoder #66