作者LaPass (LaPass)
看板Database
标题[SQL ] 将统计结果UPDATE到另外一个资料表
时间Sat Sep 21 02:34:16 2013
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)