日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

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

  繼續(xù)回到沈老師的MYSQL顛覆實(shí)戰(zhàn),首先回顧下上一節(jié)課的內(nèi)容,請(qǐng)大家會(huì)看下上節(jié)課寫的存儲(chǔ)過(guò)程。

  打開(kāi)prod_clicklog表,?我們只要把日期(不含時(shí)分秒)的部分存在數(shù)據(jù)庫(kù)中,?如果同一日期有相同用戶點(diǎn)擊商品,那么我們對(duì)其數(shù)值+1,否則的話,這張點(diǎn)擊日志表會(huì)過(guò)于龐大

  下面我們將prod_clicklog表修改下:

  

  將字段clickdate 修改為 date類型,增加clicknum字段,默認(rèn)為1.

  然后,我們把上一節(jié)課的存儲(chǔ)過(guò)程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 #代表已經(jīng)點(diǎn)擊過(guò),只要對(duì)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 #新增點(diǎn)擊日志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表中的數(shù)據(jù):

  

  然后我們多次執(zhí)行上面的存儲(chǔ)過(guò)程:

  

  OK,這個(gè)思路沒(méi)有任何問(wèn)題。

  這時(shí)問(wèn)題來(lái)了。那么商品表中的總點(diǎn)擊量,什么時(shí)候更新呢?  

  1、通過(guò)web語(yǔ)言來(lái)完成,譬如寫個(gè)程序定時(shí)執(zhí)行

  2、本課時(shí)要講的是通過(guò)mysql的事件來(lái)執(zhí)行.

   我們先執(zhí)行下面的查詢語(yǔ)句: 

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

 這樣就能取出一堆 id,和執(zhí)行總條數(shù)

   

  于是我們寫個(gè)存儲(chǔ)過(guò)程count_prod_click,來(lái)實(shí)現(xiàn)游標(biāo),

BEGINDECLARE isend int DEFAULT 0;DECLARE pid int; #代表商品IDDECLARE cnum int; #代表點(diǎn)擊量總數(shù)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 ; #游標(biāo)結(jié)束時(shí)令isend =1open cur; #打開(kāi)游標(biāo)FETCH cur into pid,cnum; #預(yù)先定義好的變量,取出第一行,并把內(nèi)容放入預(yù)先定義好的變量while isend !=1 DOUPDATE prod_main SET prod_click_all = cnum WHERE prod_id =pid; # 更新商品主表的總點(diǎn)擊量#這里可以寫業(yè)務(wù)代碼FETCH cur into pid,cnum;end while;close cur;END

  老規(guī)矩,我們新建查詢

CALL count_prod_click;

  然后刷新主表,可以看到,prod_click_all字段已經(jīng)被更新

  

  最終使用mysql新建一個(gè)事件,令每隔10秒統(tǒng)計(jì)一下并更新

  我們先查詢下mysql事件是否開(kāi)啟

show VARIABLES like '%event%'

  

  如果沒(méi)有開(kāi)啟:

SET GLOBAL event_scheduler=ON;

  OK,現(xiàn)在我們新建一個(gè)事件 event_count_prodclick:

  

  

?

?  然后我們根據(jù)這個(gè)延時(shí)加載在實(shí)戰(zhàn)中合理應(yīng)用。

?

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

上一課:mysql顛覆實(shí)戰(zhàn)筆記(四)--商品系統(tǒng)設(shè)計(jì)(一):商品主表設(shè)計(jì)

下一課:mysql顛覆實(shí)戰(zhàn)筆記(六)--商品系統(tǒng)設(shè)計(jì)(三):商品屬性設(shè)計(jì)之固定屬性

轉(zhuǎn)載于:https://www.cnblogs.com/xz1024/p/5738999.html

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。