MySQL / PHP: функции даты для статистики просмотра страниц и популярности - PullRequest
0 голосов
/ 30 июля 2009

У меня есть таблица с количеством просмотров страниц в день. Примерно так:

+------+------------+------+
|  id  | date       | hits |
+------+------------+------+
| 4876 | 2009-07-14 | 4362 |
+------+------------+------+
| 4876 | 2009-07-15 | 1324 |
+------+------------+------+
| 7653 | 2009-06-09 | 5643 |
+------+------------+------+

Мне нужно создать функцию, которая сравнивает общее количество посещений за последние две недели и получает процент изменений (популярность).

Если в первую неделю у меня 1000 просмотров, а во вторую неделю - 2000, у меня + 200% популярности

[(1000 * 2000) / 100] = 200

Если на первой неделе у меня будет больше хитов, чем на второй неделе, популярность будет в минусе (например, -80%)

У меня есть несколько вопросов:

1) Я использую правильную математическую формулу ??

2) Как я выбираю в MySQL последние две недели?

3) Возможно, что на первой неделе у нас есть совпадения, но на второй неделе вообще нет обращений, поэтому строка таблицы будет пустой для тех дат или тех конкретных дней, когда не было совпадений. 1018 *

4) Я уверен, что есть лучший способ сделать такую ​​статистику .. Некоторые лучшие идеи ????

Ответы [ 3 ]

2 голосов
/ 30 июля 2009

1) Не совсем. Я думаю, что вы хотите, чтобы процентное изменение. Переход от 1000 показов к 2000 - это увеличение на 100%, а не на 200%. Вы хотите ((2000 - 1000) / 100);

2) Две недели назад: SELECT SUM(hits) as s FROM tbl WHERE date>=NOW() - INTERVAL 2 WEEK AND date<NOW()-INTERVAL 1 WEEK

Неделю назад: SELECT SUM(hits) as s FROM tbl WHERE date>=NOW()-INTERVAL 1 WEEK

3) Не с запросом выше. Любые разрывы даты просто не будут частью SUM().

4) Этот метод мне кажется довольно хорошим. Это должно сделать работу.

1 голос
/ 30 июля 2009

Используйте это:

<?php
function fetch($sql)
{
    $query = mysql_query($sql);
    return mysql_fetch_assoc($query);
}

function calculate($week1, $week2)
{
    if ($week1 == 0)
    {
        $week1 = 1;
    }
    return ($week2 / $week1) * 100;
}

$q1 = "SELECT SUM(hits) as hits FROM table WHERE DATE_SUB(CURDATE(),INTERVAL 1 week) <= date";
$first_week_hits = fetch($q1);

$q2 = "SELECT SUM(hits) as hits FROM table WHERE DATE_SUB(CURDATE(),INTERVAL 2 week) <= date";
$second_week_hits = fetch($q2);

$percent = $str_percent = calculate($first_week_hits['hits'], $second_week_hits['hits']);
if ($percent > 0)
{
     $str_percent = '+'.$percent; // :)
}
echo "I have ".$str_percent."% of popularity";
?>
0 голосов
/ 30 июля 2009

Если за первую неделю у меня будет 1000 просмотров и вторая неделя 2000 хитов у меня + 200% популярности

Конечно, в этом случае у вас есть увеличение на 100%?

changeInHits = hitsThisMonth - hitsLastMonth
changeAsPercentageOfLastMonth = 100 x changeInHits / hitsLastMonth

так хочешь

[ (2000 / 1000) *  100 ] = 200

Возможно, вы сможете написать запрос примерно так (непроверенный, возможно, неправильный):

SELECT YEARWEEK(date) as weekno, sum(hits) as thisweek, 
   ( SELECT SUM(hits) FROM table WHERE YEARWEEK(date) = weekno - 1 ) as lastweek,
   IF (lastweek > 0, thisweek / lastweek * 100, 0) as increase
FROM table
GROUP BY weekno

хотя это будет каждую неделю

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...