MySQL / PHP: sayfa görüntüleme istatistikleri ve popülerlik için Tarih fonksiyonları

3 Cevap php

Ben günde sayfa görüntüleme sayısına sahip bir tablo var. Böyle bir şey:

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

Ben son iki hafta arasında toplam hits karşılaştıran bir işlev oluşturmak ve değişim (popülerlik) porcentage almak gerekiyor.

İlk hafta 1000 hit ve ikinci hafta 2000 hit varsa ben popülerlik +200% var

[(1000 * 2000) / 100] = 200

Ilk hafta ben ikinci haftasında daha fazla hit varsa popülerlik eksi (örneğin -80%) olacak

Ben bazı sorular var:

1) Ben doğru matematik formülü kullanıyorum?

2) Nasıl şimdi MySQL son iki hafta içinde seçmek?

3) Onun olası ilk hafta .. biz hit var, ama hiçbir hit tüm ikinci hafta çok tablo satırı bu tarihlerde veya hiç isabet vardı o özel gün için boş olacak, bu bir sorun mudur bu?

4) Ben .. Bazı iyi fikirler istatistiklerin bu tür yapmak için daha iyi bir yolu var mı eminim??

3 Cevap

Bunu kullanın:

<?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";
?>

1) Pek değil. Ben yüzde değişim istediğini düşünüyorum. 2000 hit 1000 hits gidiyor% 100 bir artış değil,% 200 değildir. Sen ((2000 - 1000) / 100) istiyorum;

2) İki hafta önce: SELECT SUM(hits) as s FROM tbl WHERE date>=NOW() - INTERVAL 2 WEEK AND date<NOW()-INTERVAL 1 WEEK

Bir hafta önce: SELECT SUM(hits) as s FROM tbl WHERE date>=NOW()-INTERVAL 1 WEEK

3) Not Yukarıdaki sorgu ile. Herhangi bir tarih boşluklar sadece SUM() parçası olmayacaktır.

4) Bu yöntem, aslında bana oldukça iyi görünüyor. Bu işi halletmek gerekir.

If the first week I have 1000 hits and the second week 2000 hits I have +200% of popularity

Şüphesiz bu durumda size% 100 bir artış var?

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

böylece istediğiniz

[ (2000 / 1000) *  100 ] = 200

Sen (denenmemiş yüzden muhtemelen yanlış) bu gibi bir sorgu bir şey yazmak mümkün olabilir:

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

her bir hafta olacağını ancak