程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql顛覆實戰筆記(五)--商品系統設計(二):定時更新商品總點擊量,定時更新總點擊

mysql顛覆實戰筆記(五)--商品系統設計(二):定時更新商品總點擊量,定時更新總點擊

編輯:MySQL綜合教程

mysql顛覆實戰筆記(五)--商品系統設計(二):定時更新商品總點擊量,定時更新總點擊


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

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

  下面我們將prod_clicklog表修改下:

  

  將字段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);

  

  prod_clicklog表中的數據:

  

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

  

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

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

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

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

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

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

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

   

  於是我們寫個存儲過程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新建一個事件,令每隔10秒統計一下並更新

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

show VARIABLES like '%event%'

  

  如果沒有開啟:

SET GLOBAL event_scheduler=ON;

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

  

  

 

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

 

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved