yapmak istediğin yapıya istemsiz dahil oluyorum.
gün,ay,yıl diye ayrı ayrı oluşturulmuş bir tarih sütunu olamaz. mysql'in gün ay yıl bilgisi içeren DATE adında tipi var.
veritabanlarının hepsi için geçerlidir ne tablo oluşturursan oluştur o tablonun bir tane primary key olmak zorundadır.
senin istediğin yapı için tablon
video_id (int),tarih(date),hit(int) sütunlarında oluşacak
ve video_id ve tarih iki sütun ortak primary key oluşturucak.
hits(video_id,tarih,hit)
güncelleme işleminde
sql > SELECT COUNT(*) FROM hits WHERE video_id=$videoid and tarih=DATE(NOW())
eklenme olmuş ise
sql > UPDATE hits SET hit = hit + 1 WHERE video_id ='$video_id' and tarih=DATE(NOW())
olmamış ise
sql > INSERT INTO hits VALUES ($video_id,1,DATE(NOW()))
sonrasında
bugün izlenme sayısı
sql > SELECT hit FROM hits WHERE video_id = $video_id and tarih=DATE(NOW())
son 7 gün
sql > SELECT video_id,SUM(hit) FROM hits WHERE video_id = $video_id and tarih>DATE_ADD(DATE(NOW()),INTERVAL -7 DAY) group by video_id
vs vs istediğin gibi türet..
kalın belirttiğim yerlere dikkat edin video_id ve tarih sütunlarında filtreleme yapıyorum yani primary key'im üzerinde
mesela x videosu 15.04.2015 de 5 hit aldı
aynı x videosu 14.04.2015 de 2 hit aldı.
Şimdi son 7 gün dediğimizde bu videonun aldığı hit 7 olarak gözükmesi lazım ama bizde ya 2 gözüküyor ya da 5.
select * from madvideo INNER JOIN hit ON madvideo.id = hit.video_id WHERE hit.tarih>DATE_ADD(DATE(NOW()),INTERVAL -7 DAY) group by video_id order by hit.hit
2 satırı toplayıp 7 olarak sıralamaya alıyor ama gösterirken tek satırdan gösterme yapıyor.
yani while videonun o günkü hitini gösteriyor. son 7 günün toplam hitini gösteremedim