我有以下一组 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 个遵循相同模式的查询 - 有没有更好的方法来构建查询,这意味着我不必继续查询对于“有多少人达到了第 2 阶段”?
编辑:每个页面视图都存储为formation_page_hits 中的一个条目 - 因此每个会话都有完整的页面视图记录
id_formation_page_hits INT PRIMARY_KEY, session_id VARCHAR(100), datetime DATETIME, progress INT