У меня есть следующий набор запросов 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