Saat bozuldu son 24 saat içinde ziyaret gösterisi sayısı,

2 Cevap php

Ben her zaman birileri ilk defa siteyi ziyaret eden bir mysql tabloda bir zaman damgası depolama ediyorum.

Şöyle verilerle rüzgar:

2009-08-02 04:08:27
2009-08-02 04:07:47
2009-08-02 05:58:13
2009-08-02 06:28:23
2009-08-02 06:34:22
2009-08-02 08:23:21
2009-08-02 09:38:56

Ne Im bu verilerle yapmak isteyen her saat içine düşmek ziyaretlerin sayısını oluşturmaktır. Yani yukarıdaki örnekte ben 2 ziyaretleri, 5 saat = 1, 6 saat 2, 8 saat 1 gibi olan 4 saatte varmak

Bunu yapmak için en iyi yolu, bu nedenle gibi deyimi için bir yapmak olacağını düşündüm:

// a 24 hour loop
for($i = 24; $i > -1; $i--) {

    // the query for each hour
    $sql = 'SELECT * FROM visits WHERE (DATE(added) = DATE_SUB(CURRENT_DATE(), INTERVAL ' . $i . ' HOUR))'

$res = mysql_query($sql);
$count = mysql_num_rows($res);  


    // store the number of rows for this loop in the array
    $visits[] = $count;
}

Bu bana mantıklı görünüyor ... ama nedense ... onun kesinlikle çalışmıyor.

Bunu nasıl yapardın?

2 Cevap

ne fıkra ile bir grup kullanarak, tek bir sorguda bunu yapıyor?

Böyle bir şey muhtemelen yapacağını:

select HOUR(added), count(*) as nbr
from visits
where added between '2009-07-14' and '2009-07-15'
group by HOUR(added)
order by HOUR(added)

(of course, you might need to adapt some things, like the dates)

It would make your DB server work more for that query than for the others your proposed... But only one query, and not 24 -- which is a good thing.
On the other side, you'd have less data going from the DB server to the PHP server ; which is great, especially if the table is big !

Ardından, PHP tarafında, bu sorgu size sadece saat almak gibi, tam tarih "yeniden" gerekecek.

Nasıl hakkında:

SELECT hour(added), count(*) 
FROM visits 
WHERE added >= CURRENT_DATE()-1
GROUP BY hour(added)

Hour(time): "süre saatini döndürür dönüş değeri zaman günün-değerleri için 0 ile 23 arası bir dizi."