我不完全确定这是否可行,但我怀疑它是。
我正在尝试收集一些非常基本的统计数据,所以我有一个“跟踪”表,可以持续存储信息,就像这样;
ID,IP,itemid
每次查看项目时,都会记录访问者的IP地址和项目ID。
我每天都要汇总这些数据并将其插入另一张表中,就像这样;
ID,itemid,views
现在,'views'元素我想要是唯一的 - 所以忽略任何重复的IP地址(只计算一次)。
我知道我可以简单地遍历它们并以这种方式执行,但是只用一个查询就可以完成整个过程吗?
我正在使用MySQL
答案 0 :(得分:1)
试试这个,
insert into newtable(itemid,views)
select itemid,count(*)
from (
select itemid
from tracker
group by itemid,ip
)
as a
group by a.itemid.
答案 1 :(得分:1)
在其他RDBMS中,可以这种方式:
insert into othertable (field_views, field_itemid)
select count(distinct t.views), t.itemid from tracker
group by t.itemid
另见http://dev.mysql.com/doc/refman/5.0/en/insert-select.html
注意,此解决方案意味着在othertable.id
中存在自动增量答案 2 :(得分:1)
如果您按tracker
对itemid
表进行分组,则不同IP地址的数量应为您想要的观看次数:
INSERT INTO newtable (itemid, views)
SELECT itemid, COUNT(DISTINCT IP)
FROM tracker
GROUP BY itemid;