我有以下一组MySQL查询,用于跟踪用户通过网站的进度。有没有简化它们的好方法?结合回收多个自加入的mysql查询
#How many people reached stage 2
SELECT COUNT(DISTINCT a.session_id) as "total"
FROM formation_page_hits a
WHERE a.progress = 2
AND DATE(a.datetime) = "2011-03-23";
#How many people reached stage 4 having reached stage 2
SELECT COUNT(DISTINCT a.session_id) as "total"
FROM formation_page_hits a, (SELECT f.session_id, f.`datetime`
FROM formation_page_hits f
WHERE f.progress = 2) as b
WHERE a.progress = 4
AND a.session_id = b.session_id
AND DATE(b.datetime) = "2011-03-23"
AND DATE(a.datetime) = "2011-03-23";
#How many people reached stage 7, having reached stage 4, having reached stage 2
SELECT COUNT(DISTINCT a.session_id) as "total"
FROM formation_page_hits a, (SELECT f.session_id, f.`datetime`
FROM formation_page_hits f
WHERE f.progress = 4) as b, (SELECT f.session_id, f.`datetime`
FROM formation_page_hits f
WHERE f.progress = 2) as c
WHERE a.progress = 7
AND a.session_id = b.session_id
AND a.session_id = c.session_id
AND DATE(c.datetime) = "2011-03-23"
AND DATE(b.datetime) = "2011-03-23"
AND DATE(a.datetime) = "2011-03-23";
正如你所看到的,我很快重新查询相同的信息,也有遵循相同的模式附加4个或5个查询 - 在那里建造这意味着我查询一个更好的办法不必一直询问“有多少人到达第二阶段”?
编辑:每个页面视图存储为formation_page_hits的条目 - 因此存在的页面浏览量为每个会话
id_formation_page_hits INT PRIMARY_KEY, session_id VARCHAR(100), datetime DATETIME, progress INT
我们可以缓存临时表格的结果吗? – 2011-03-28 16:04:18
对于任何'progress','session_id'都可以有多个记录吗? – Quassnoi 2011-03-28 16:06:16
是的,每个'session_id'都有多个条目(每个页面视图对应一个会话) - 每个页面都附有一个特定的'progress'编号 – Jon 2011-03-28 16:10:59