Можно ли все это одним запросом?

idencial

Одинаковый
[/QUOTE]
нет, это вычисляется один раз, просто смотриться страшно
=)
К сожалению в
PHP:
SELECT count(a.url) as hits, count(DISTINCT(a.ip)) as hosts, count(DISTINCT(a.stat_cookies)) as visitors, DATE_FORMAT(b.datetime, '%Y-%m-%d') as bdate FROM page_stat as a, page_stat as b where (b.datetime >= '2003-01-12' AND b.datetime <= '2003-02-12') and (a.datetime >= b.datetime AND a.datetime <= '2003-02-12') group by bdate order by bdate desc
что-то не то (видимо надо мудрить в where)
 

Demiurg

Guest
стоп. у тебя получается полное декартовое произведение двух таблиц по 30000 записей итого получается 900 миллионов записей, естественно, что mysql не очень хочет все это проверять. лучше сделай три простых запроса.
 

chira

Новичок
Если у тебя минимальная временная единица по которой ты хочешь получить статистику - это сутки,
то нужно сделать небольшую подготовку перед объединением таблиц.

Код:
CREATE TEMPORARY TABLE page_stat_tmp ( dt datetime )
SELECT distinct
 CONCAT(date_format(datetime,'%Y-%m-%d'),' 23:59:59')
FROM page_stat
WHERE
  datetime BETWEEN date_sub('2003-02-12', interval 1 month)
       AND '2003-02-12'

//и дальше использовать эту временную таблицу
//если тебе нужен нарастающий итог ты по моему забыл одно условие a.datetime <= b.dt

SELECT count(a.url) as hits, count(DISTINCT(a.ip)) as hosts, count(DISTINCT(a.stat_cookies)) as visitors, b.dt as bdate
FROM page_stat as a, page_stat_tmp as b
where 
  a.datetime <= b.dt
  AND a.datetime >= b.dt //???????? может здесь должно быть date_sub('2003-02-12', interval 1 month)
  AND a.datetime <= '2003-02-12'
group by bdate
order by bdate desc
Запрос получается "тяжелый" (обрабатывает много записей)
Если такую выборку делать часто , то лучше подумать над другим алгоритмом.
 
Сверху