[SQL ] 將統計結果UPDATE到另外一個資料表
MYSQL 5.5.27
TABLE visit (使用者資料)
v_id
v_country 國家
(略)
TABLE visitop (使用者活動紀錄)
vo_id
vo_vid (這是v_id)
vo_sid (瀏覽的頁面id = cc_sid)
vo_date (瀏覽的日期、時間)
(略)
TABLE count_country (統計的資料表)
cc_id
cc_sid
cc_country
cc_num
(略)
就是,想要寫一段SQL
可以統計每個頁面(cc_sid)的國家(cc_country)的使用者數目
就是:
SELECT vo_sid,v_country,COUNT(*) AS new_num FROM visitop,visit
WHERE vo_vid=v_id AND
vo_date >= 統計起始時間 AND
vo_date < 現在
GROUP BY vo_sid,v_country
這樣
但是TABLE count_country的產生方式是交給排程去處理的
上一次的統計結果的時間,就是統計起始時間
也就是說,裡面可能已經有以前的資料
那我要怎麼判斷count_country裡面是否有
cc_sid=vo_sid AND cc_country=v_country
這一筆資料,來決定要INSERT 進去
或是
UPDATE cc_num = cc_num+new_num
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.41.101.10
解決了....
INSERT INTO count_country(cc_sid,cc_country,cc_num)
SELECT vo_sid,v_country,@new_num:=COUNT(*)
FROM visitop,visit
WHERE vo_sid = 33 AND
'2013-09-21 04:35:32' > v_date AND
vo_date >='2013-09-01 04:00:00' AND
vo_vid=v_id
GROUP BY vo_sid,v_country
ON DUPLICATE KEY UPDATE cc_num = cc_num + @new_num;
關鍵是把 vo_sid,v_country 設成 UNIQUE
http://i.imgur.com/POK67e0.jpg

可以睡好覺了 = =
※ 編輯: LaPass 來自: 114.41.101.10 (09/21 04:43)