Liste MySQL tablodan saatte vurur

3 Cevap php

Ben bir veritabanından saat başına isabet çalışmak çalışıyorum. Veriler, şu şekilde temel olarak depolanır:

Table Name: Visitors
============================
VisitorIP          TIMESTAMP
----------------------------
15.215.65.65       123456789

I want to display total hits per hour (within the last 6 hours ) including the hours that has no hits. Example of the output:

// Assuming now : 21:00
21:00 - 0 hits
20:00 - 1 hits
19:00 - 4 hits
18:00 - 0 hits
17:00 - 2 hits
16:00 - 3 hits

i dizisi verileri almak isterdim, depolanmış tarih UNIX zaman damgası biçimi olduğuna dikkat edin. ve herhangi bir hit olmadan birkaç saat olabilir!

Teşekkürler

3 Cevap

Bunun için basit anahtar kelime ARASINDA kullanabilirsiniz. Datetime Eğer (aralık 3600 saniye) seçmek istediğiniz değerleri arasında anlatabilirim.

SELECT * FROM VISITORS WHERE TIMESTAMP BETWEEN UNIX_TIMESTAMP()-3600*1 AND UNIX_TIMESTAMP()-3600*0;
SELECT * FROM VISITORS WHERE TIMESTAMP BETWEEN UNIX_TIMESTAMP()-3600*2 AND UNIX_TIMESTAMP()-3600*1;
SELECT * FROM VISITORS WHERE TIMESTAMP BETWEEN UNIX_TIMESTAMP()-3600*3 AND UNIX_TIMESTAMP()-3600*2;
SELECT * FROM VISITORS WHERE TIMESTAMP BETWEEN UNIX_TIMESTAMP()-3600*4 AND UNIX_TIMESTAMP()-3600*3;
SELECT * FROM VISITORS WHERE TIMESTAMP BETWEEN UNIX_TIMESTAMP()-3600*5 AND UNIX_TIMESTAMP()-3600*4;
SELECT * FROM VISITORS WHERE TIMESTAMP BETWEEN UNIX_TIMESTAMP()-3600*6 AND UNIX_TIMESTAMP()-3600*5;
SELECT MONTH(timestamp),DAY(timestamp), HOUR(timestamp),count(*) 
 from visitors
  group by MONTH(timestamp), DAY(timestamp), HOUR(timestamp)

Php eksik saat veri herhangi bir delik için hesap gerekir.

hemen cevap Yukarıda basitleştirilmiş,

for($i=1;$i<=6;$i++){
  $s -= $i;    
  $query[$i] = "SELECT * FROM VISITORS WHERE TIMESTAMP BETWEEN UNIX_TIMESTAMP()-3600*$i AND UNIX_TIMESTAMP()-3600*$s";
}

$i = 1;
foreach($query as $value){
  $result[$i] = mysql_fetch_row($query[$i]);
  $i++;
}

Sadece basit bir fikir. kullanmak için çekinmeyin.