|
|
|
| И снова у меня вопрос по SQL. :)
Есть счетчик. Когда пользователь заходит на страницу со счетчиком, то время захода заносится в таблицу counter.
counter
+---------------------+
| time |
+---------------------+
| 2005-08-30 00:23:08 |
| 2005-08-30 00:23:32 |
| 2005-08-30 00:24:03 |
| 2005-08-30 13:24:20 |
| 2005-08-30 13:25:55 |
| 2005-08-30 13:26:45 |
| 2005-08-30 13:32:01 |
| 2005-08-30 18:33:19 |
| 2005-08-30 18:35:19 |
| 2005-08-30 20:35:46 |
| 2005-08-30 21:35:49 |
| 2005-08-30 21:38:33 |
| 2005-09-30 00:39:27 |
| 2005-09-30 01:40:15 |
| 2005-09-30 01:41:04 |
| 2005-09-30 13:41:33 |
| 2005-09-30 13:41:37 |
| 2005-09-30 15:41:51 |
| 2005-09-30 15:44:10 |
| 2005-09-30 18:44:21 |
| 2005-09-30 18:44:33 |
| 2005-09-30 18:44:56 |
| 2005-09-30 18:44:56 |
| 2005-09-30 21:44:56 |
+---------------------+
|
Так вот у меня такая проблемка. Мне нужно сделать таблицу в которой по часам будет расписана средняя посещаемость со всех дней. Т.е.:
+--------+-------+
| HOUR() | AVG() |
+--------+-------+
| 00 | 2 |
| 01 | 1 |
| 13 | 3 |
| 15 | 1 |
| 18 | 3 |
| 20 | 0.5 |
| 21 | 1.5 |
+--------+-------+
|
Заранее ОГРОМНЕЙШЕЕ спасибо! | |
|
|
|
|
|
|
|
для: Евгений Петров
(09.10.2005 в 16:02)
| | Попробуйте этот запрос
SELECT DATE_FORMAT(time,'%H') AS num_hour,
COUNT(DATE_FORMAT(time,'%H')) AS avg
FROM 'counter'
GROUP BY DATE_FORMAT(time,'%H')
|
| |
|
|
|
|
|
|
|
для: napTu3aH
(09.10.2005 в 16:18)
| | Не совсем уверен где именно ошибка, но это не то. т.к. при очередном заходе на сайт среднее значение увеличивается на единицу. А должно где то на 0.01 т.к. статистика ведется уже не один день. | |
|
|
|
|
|
|
|
для: Евгений Петров
(09.10.2005 в 16:27)
| | Да действительно, я не внимательно прочитал ваш пост. Этот запрос выводит не среднее значение, а количество поситителей за конкретный час. | |
|
|
|
|
|
|
|
для: Евгений Петров
(09.10.2005 в 16:27)
| | У вас в таблице присутствует первичный идентификатор? Например "id" | |
|
|
|
|
|
|
|
для: napTu3aH
(09.10.2005 в 16:49)
| | Нет но если надо сделаю. :) | |
|
|
|
|
|
|
|
для: napTu3aH
(09.10.2005 в 16:49)
| | Нет но если надо сделаю. :) | |
|
|
|
|
|
|
|
для: Евгений Петров
(09.10.2005 в 19:23)
| | Если надо вот дамп таблицы: | |
|
|
|
|
|
|
|
для: Евгений Петров
(09.10.2005 в 19:48)
| | Спасибо, я воссоздал у себя похожую, можно будет и на вашей попробовать. Искал функцию Мускула возвращающую общее количество строк в таблице, но так и не нашел. Можно обойти, если создать поле id auto_increment, и если записи иэ таблицы не будут удаляться.
SELECT DATE_FORMAT(time,'%H') AS num_hour,
COUNT(DATE_FORMAT(time,'%H'))/MAX(id) AS avg
FROM 'counter'
GROUP BY DATE_FORMAT(time,'%H')
|
Или писать в два запроса, в первом принимать количество строк, а во втором просто подставить это значение для общего числа строк.
$sql="SELECT * FROM counter";
$num=mysql_num_rows($sql);
$sql="SELECT DATE_FORMAT(time,'%H') AS num_hour,
COUNT(DATE_FORMAT(time,'%H'))/$num
FROM 'counter'
GROUP BY DATE_FORMAT(time,'%H')";
$result=mysql_query($sql);
|
| |
|
|
|
|
|
|
|
для: napTu3aH
(09.10.2005 в 20:18)
| | Спасибо буду смотреть. | |
|
|
|
|
|
|
|
для: Евгений Петров
(10.10.2005 в 01:02)
| | Нет не то. Можете сами в этом убедиться если проверите на моей таблице. Вы делите на общее число записей в таблице, а надо только на количесвто дней. | |
|
|
|
|
|
|
|
для: Евгений Петров
(10.10.2005 в 16:07)
| | Сам сказал и сам ответил. :) Третью строчку в вашем коде надо заменить на:
$sql=mysql_query("SELECT * FROM counter GROUP BY DATE_FORMAT(time,'%d')");
|
И все работает. Спасибо! | |
|
|
|