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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

随机推送数据

發布時間:2024/9/27 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 随机推送数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求:對商品表按照好評、暢銷、特價等維度隨機推送給用戶.

解決方法:通過split_string結合存儲過程的for循環解決該問題.

Mysql:

DROP PROCEDURE IF EXISTS pro_gen_recomondcomm; CREATE PROCEDURE `pro_gen_recomondcomm`(IN haveorder bit,IN classify int,IN proceeDate varchar(20)) BEGINDECLARE isfestival bit;DECLARE havepurchase bit;DECLARE category int;DECLARE ratevals VARCHAR(20);DECLARE nums INT;DECLARE selnumrate INT;DECLARE commentrate INT;DECLARE bargainrate INT;DECLARE i INT;DECLARE areacnt INT;DECLARE localarea VARCHAR(20);SET isfestival = 0;SET havepurchase = haveorder;SET category = classify;/*刪除已有的當天的數據**/TRUNCATE TABLE shenl_bi_recommend_comm2;call pro_gen_area;IF isfestival = 0 AND haveorder = 0 THENSELECT ordered,rates,total INTO haveorder,ratevals,nums FROM shenl_bi_metadata WHERE classify = category AND type = 1 AND ordered = havepurchase;SELECT CAST(split_string(ratevals, ',',1) AS decimal(9,2))*nums, CAST(split_string(ratevals, ',',2) AS decimal(9,2))*nums, CAST(split_string(ratevals, ',',3) AS decimal(9,2))*numsINTO selnumrate,commentrate,bargainrate;SELECT MAX(rank) INTO areacnt FROM(SELECT @row_number:=@row_number+1 AS rank,area FROM (SELECT DISTINCT area AS area FROM shenl_bi_temp_carryable )area,(SELECT @row_number:=0) AS tORDER BY area DESC) A;SET i = 1;while i<=areacnt do SELECT area INTO localarea FROM(SELECT @row_number:=@row_number+1 AS rank,area FROM (SELECT DISTINCT area AS area FROM shenl_bi_temp_carryable )area,(SELECT @row_number:=0) AS tORDER BY area DESC) A WHERE A.rank = i;/* add 生成各個城市的邏輯*/INSERT INTO shenl_bi_recommend_comm2(gid,source,processdate,cityid)/**以熱銷維度來推薦商品 **/SELECT gid,source,proceeDate,localarea FROM (SELECT gid,1 AS source,str_to_date(proceeDate,'%Y-%m-%d') AS proceeDate,localarea FROM(SELECT gid,sellnum FROM shenl_bi_temp_carryable WHERE area = localareaORDER BY sellnum DESC LIMIT selnumrate)BORDER BY RAND())C;/**以特價維度來推 **/ INSERT INTO shenl_bi_recommend_comm2(gid,source,processdate,cityid) SELECT A.gid,2 as "source", A.proceeDate,A.area FROM(SELECT gid,str_to_date(proceeDate,'%Y-%m-%d') AS proceeDate,localarea as area FROM(SELECT gid FROM shenl_bi_temp_carryable WHERE bargain=1 AND area = localareaORDER BY RAND() LIMIT bargainrate)A)A LEFT JOIN (SELECT gid,processdate,cityid FROM shenl_bi_recommend_comm2 WHERE processdate = proceeDate AND cityid = localarea) B ON A.gid = B.gid AND A.proceeDate = B.processdate AND A.area = localarea WHERE B.gid IS NULL;/**以好評維度推 **/ INSERT INTO shenl_bi_recommend_comm2(gid,source,processdate,cityid) SELECT A.gid,3 as "source", A.proceeDate,A.area FROM(SELECT gid,str_to_date(proceeDate,'%Y-%m-%d') AS proceeDate,localarea as area FROM(SELECT gid FROM(SELECT gid,rate FROM shenl_bi_temp_carryable WHERE area = localareaORDER BY rate DESC LIMIT commentrate)BORDER BY RAND())A)A LEFT JOIN (SELECT gid,processdate,cityid FROM shenl_bi_recommend_comm2 WHERE processdate = proceeDate AND cityid = localarea) B ON A.gid = B.gid AND A.proceeDate = B.processdate AND A.area = localarea WHERE B.gid IS NULL;SET i=i+1;END WHILE;END IF;/**隨機追加推,每個city取出12條數據 **/ INSERT INTO shenl_bi_recommend_comm2(gid,source,processdate,cityid) SELECT B.gid,5 as "source",str_to_date(proceeDate,'%Y-%m-%d') AS proceeDate,area FROM(SELECT gid,area FROM(SELECT A.gid FROM shenl_goods A WHERE A.g_status = 1 AND A.g_num > 0ORDER BY RAND() LIMIT 12)ACROSS JOIN (SELECT DISTINCT area FROM shenl_bi_temp_carryable) BORDER BY area, RAND())B LEFT JOIN shenl_bi_recommend_comm2 C ON C.gid = B.gid AND C.cityid = B.area WHERE C.gid IS NULL;END;

代碼解讀:

1)? 設定IN haveorder bit,IN classify int,IN proceeDate varchar(20)如下3個參數

2)?call pro_gen_area;調用依賴的存儲過程

3)? 先刪除當天跑的數據TRUNCATETABLE md_bi_recommend_comm2;

4)? 如果參數滿足某個條件則執行:IF isfestival =0AND haveorder =0THEN

5)? 每一種推送數據策略對應一個source,hardcode一個數數字編碼

6)? 如果left join依次避免本次的數據和上一結果集重復

LEFT?JOIN

(SELECT?gid,processdate,cityid?FROM?md_bi_recommend_comm2?WHERE?processdate?=?proceeDate?AND?cityid?=localarea)B

ON?A.gid?=?B.gid?AND?A.proceeDate?=?B.processdate?AND?A.area?=?localarea

WHERE?B.gid?IS?NULL;

總結

以上是生活随笔為你收集整理的随机推送数据的全部內容,希望文章能夠幫你解決所遇到的問題。

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