• 12-04-2015, 16:18:54
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba beyler,

    mesela en çok izlenen bugünü belki sayfada ki bir döngüyle databaseyi her gün gece 00.00 da sıfırlayabilirim ama hafta ve ay için ne yapacağım?


    cronjob kullanma taraftarı değilim.
  • 12-04-2015, 18:59:36
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Veritabanı kayıtlarından bir örnek verirsen nasıl çekeceğini yazayım.
    yani hitleri falan nasıl kayıt ediyorsun ?
  • 12-04-2015, 19:41:12
    #3
    update +1 olarak kayıt ediyorum hocam(: sayfaya girince arttırıyorum izlenmeyi
  • 12-04-2015, 20:59:08
    #4
    eğer sadece +1 yapıyorsan gün hafta ay diye bölemezsin hocam.
    bende benzer bir şey yapmıştım, hitler için ayrı bir tablo açtım. yani
    videolar tablosunda izlenen videoya +1 yapıyorsun, bu senin toplam hitin olsun birde hit tablosu oluştur. hit tablosuna id + video id + üye id + tarih şeklinde kayıt yap.
    sonra verileri if sorgusuyla çekersin.
    bu günün en çok izlenen kaydı bence bu şekilde kullanmak daha iyi olur.
    $sorgu=mysql_query("select video_id,count(id) as sayi from hits where gun='12' and  ay='04' and yil='2015' group by video_id order by sayi desc limit 10");,
    bu da yeni tablon için bi örnek

    $gun = date("d");
    $ay = date("m");
    $yil = date("Y");
    $sorgu = "INSERT INTO hits ";
    $sorgu .= "(video_id,uye_id,gun,ay,yil)";
    $sorgu .= " VALUES ";
    $sorgu .= "('$video_id','$uye_id','$gun','$ay','$yil')";
    $hitler = mysql_query($sorgu);
    $f = "1";
    $ekle = $eskihit+$f;
    if ($hitler)
    {$sorgi = "UPDATE videolar SET hit = '".$ekle."' WHERE `id` = '$id'"; mysql_query($sorgi); }
    CREATE TABLE IF NOT EXISTS `hits` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `video_id` varchar(255) NOT NULL,
      `uye_id` varchar(255) NOT NULL,
      `gun` varchar(255) NOT NULL,
      `ay` varchar(255) NOT NULL,
      `yil` varchar(255) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id` (`id`)
      ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
  • 12-04-2015, 22:32:55
    #5
    ylv
    Üyeliği durduruldu
    ReLegolaS adlı üyeden alıntı: mesajı görüntüle
    Merhaba beyler,

    mesela en çok izlenen bugünü belki sayfada ki bir döngüyle databaseyi her gün gece 00.00 da sıfırlayabilirim ama hafta ve ay için ne yapacağım?


    cronjob kullanma taraftarı değilim.
    veritabanında sayaç için ayrı bir tablo oluştuyorsun.

    sayac(id,hit,ay,hafta,gun)

    id primary key ve içerik (yazi,video vs neyse) tablonun primary sütununa foreign key referansı vericeksin.

    hit ,ay, hafta, gun integer tipinde unsigned özelliği vericeksin, default değerleri 0 olucak.

    sen normal update +1 olarak bahsettiğin işlemi sadece gun sütunu için yapıcaksın.

    hit,ay,hafta bu sütunlar için yapmayacaksın sürekli.

    select sorgularında veya listelerken bu hafta hiti hafta+gun olarak, toplam hiti hafta+gun olarak göstereceksin.

    her gun sonu

    gun sütunundaki değerleri hit,ay,hafta sütunlarına ekliyeceksin.

    misal

    sql > update sayac set hit = hit+gun, ay = ay +gun, hafta = hafta +gun, gun = 0

    gun sütuna 0 değeri vericeksin, hafta başlangıcı pazartesi ise hafta sütunu, ay başı ise ay sütununa 0 değeri vericeksin.


    cronjob kullanma taraftarı değilsen mysql event kullanıcaksın. mysql event bilgin yoksa google üzerinde araştırabilirsin, yapamaz isen konu aç ben ordan yardımcı olur hallederim.

    php de direk event olayı yok ama eklenti mevcut.
    https://pecl.php.net/package/event
    http://php.net/manual/en/book.libevent.php

    kolay gelsin.
  • 14-04-2015, 06:59:12
    #6
    adme adlı üyeden alıntı: mesajı görüntüle
    eğer sadece +1 yapıyorsan gün hafta ay diye bölemezsin hocam.
    bende benzer bir şey yapmıştım, hitler için ayrı bir tablo açtım. yani
    videolar tablosunda izlenen videoya +1 yapıyorsun, bu senin toplam hitin olsun birde hit tablosu oluştur. hit tablosuna id + video id + üye id + tarih şeklinde kayıt yap.
    sonra verileri if sorgusuyla çekersin.
    bu günün en çok izlenen kaydı bence bu şekilde kullanmak daha iyi olur.
    $sorgu=mysql_query("select video_id,count(id) as sayi from hits where gun='12' and  ay='04' and yil='2015' group by video_id order by sayi desc limit 10");,
    bu da yeni tablon için bi örnek

    $gun = date("d");
    $ay = date("m");
    $yil = date("Y");
    $sorgu = "INSERT INTO hits ";
    $sorgu .= "(video_id,uye_id,gun,ay,yil)";
    $sorgu .= " VALUES ";
    $sorgu .= "('$video_id','$uye_id','$gun','$ay','$yil')";
    $hitler = mysql_query($sorgu);
    $f = "1";
    $ekle = $eskihit+$f;
    if ($hitler)
    {$sorgi = "UPDATE videolar SET hit = '".$ekle."' WHERE `id` = '$id'"; mysql_query($sorgi); }
    CREATE TABLE IF NOT EXISTS `hits` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `video_id` varchar(255) NOT NULL,
      `uye_id` varchar(255) NOT NULL,
      `gun` varchar(255) NOT NULL,
      `ay` varchar(255) NOT NULL,
      `yil` varchar(255) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id` (`id`)
      ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
    hocam count olayı ve sürekli tabloda yeni veri açmak sorun olacağını düşündüm ve sein kodlar ile şöyle bişey yazdım

    $video_id=$va['id'];
    $gun = date("d");
    $ay = date("m");
    $yil = date("Y");
    
    $f = "1";
    $ekle = $eskihit+$f;
    
    $result = mysql_query("SELECT * FROM hits WHERE video_id ='$video_id' and gun ='$gun' and ay ='$ay' and yil ='$yil'");
    
    if( mysql_num_rows($result) > 0) {
        mysql_query("UPDATE hits SET hit = hit + 1 where video_id ='$video_id' and gun ='$gun' and ay ='$ay' and yil ='$yil' ");
    }
    else
    {
        mysql_query("INSERT INTO hits (video_id,hit,gun,ay,yil) VALUES ('$video_id','$f','$gun','$ay','$yil') ");
    }
    ama sorguyu nasıl geri alacağım bunu yapamadım(:

    yani şu kodda takıldım

    $sorgu=mysql_query("select video_id,count(id) as sayi from hits where gun='12' and  ay='04' and yil='2015' group by video_id order by sayi desc limit 10");,
  • 14-04-2015, 13:23:35
    #7
    ReLegolaS adlı üyeden alıntı: mesajı görüntüle
    hocam count olayı ve sürekli tabloda yeni veri açmak sorun olacağını düşündüm ve sein kodlar ile şöyle bişey yazdım

    $video_id=$va['id'];
    $gun = date("d");
    $ay = date("m");
    $yil = date("Y");
    
    $f = "1";
    $ekle = $eskihit+$f;
    
    $result = mysql_query("SELECT * FROM hits WHERE video_id ='$video_id' and gun ='$gun' and ay ='$ay' and yil ='$yil'");
    
    if( mysql_num_rows($result) > 0) {
        mysql_query("UPDATE hits SET hit = hit + 1 where video_id ='$video_id' and gun ='$gun' and ay ='$ay' and yil ='$yil' ");
    }
    else
    {
        mysql_query("INSERT INTO hits (video_id,hit,gun,ay,yil) VALUES ('$video_id','$f','$gun','$ay','$yil') ");
    }
    ama sorguyu nasıl geri alacağım bunu yapamadım(:

    yani şu kodda takıldım

    $sorgu=mysql_query("select video_id,count(id) as sayi from hits where gun='12' and  ay='04' and yil='2015' group by video_id order by sayi desc limit 10");,
    ****mysql_query("UPDATE hits SET hit = hit + 1 where video_id ='$video_id' and gun ='$gun' and ay ='$ay' and yil ='$yil' ");
    bu kod çalışıyor mu ? çalışmaması gerek çünkü sende hit diye bir sütun yok ve eğer bu şekilde ekleme yaparsan hit tek sütun olacağı için hangi gün basıldığını çekemezsin. eğer tabloya sürekli veri kaydı yapmak istemiyorsan üstteki arkadaşın dediği gibi günlük olarak kaydedebilirsin.


    $video_id=$va['id'];
    $gun = date("d");
    $ay = date("m");
    $yil = date("Y");
    $tarih = date("Ymd");
    
    $f = "1";
    $ekle = $eskihit+$f;
    
    $result = mysql_query("SELECT * FROM hits WHERE video_id ='$video_id' and gun ='$gun' and ay ='$ay' and yil ='$yil'");
    
    if( mysql_num_rows($result) > 0) {
    $d5=mysql_fetch_array($result);
    $gun=$d5["gun"];
    $ay=$d5["ay"];
    $yil=$d5["yil"];
    $yg = $gun +$f;
        mysql_query("UPDATE hits SET gun =$yg where video_id ='$video_id' and tarih  = '$tarih' ");
    }
    gibi. böyle tarihi tarih sütununda tutarsın, her gün tabloda gün sütununa ekletirsin, istatistikler yada hitleri nerede gösteriyorsan oraya da bir if kontrolü koy her 7 günde bir gün tablosunda gördüklerini haftaya aktarsın.
  • 14-04-2015, 15:46:21
    #8
    adme adlı üyeden alıntı: mesajı görüntüle
    ****mysql_query("UPDATE hits SET hit = hit + 1 where video_id ='$video_id' and gun ='$gun' and ay ='$ay' and yil ='$yil' ");
    bu kod çalışıyor mu ? çalışmaması gerek çünkü sende hit diye bir sütun yok ve eğer bu şekilde ekleme yaparsan hit tek sütun olacağı için hangi gün basıldığını çekemezsin. eğer tabloya sürekli veri kaydı yapmak istemiyorsan üstteki arkadaşın dediği gibi günlük olarak kaydedebilirsin.


    $video_id=$va['id'];
    $gun = date("d");
    $ay = date("m");
    $yil = date("Y");
    $tarih = date("Ymd");
    
    $f = "1";
    $ekle = $eskihit+$f;
    
    $result = mysql_query("SELECT * FROM hits WHERE video_id ='$video_id' and gun ='$gun' and ay ='$ay' and yil ='$yil'");
    
    if( mysql_num_rows($result) > 0) {
    $d5=mysql_fetch_array($result);
    $gun=$d5["gun"];
    $ay=$d5["ay"];
    $yil=$d5["yil"];
    $yg = $gun +$f;
        mysql_query("UPDATE hits SET gun =$yg where video_id ='$video_id' and tarih  = '$tarih' ");
    }
    gibi. böyle tarihi tarih sütununda tutarsın, her gün tabloda gün sütununa ekletirsin, istatistikler yada hitleri nerede gösteriyorsan oraya da bir if kontrolü koy her 7 günde bir gün tablosunda gördüklerini haftaya aktarsın.
    hit diye alan oluşturdum. yani hergün farklı bir sutun açıyor ve hergün o sutuna +1 yapıyor. Tek istediğim bunu nasıl php ile gösterebilirim. yada sorguda kullanabilirim.
  • 14-04-2015, 19:40:53
    #9
    ReLegolaS adlı üyeden alıntı: mesajı görüntüle
    hit diye alan oluşturdum. yani hergün farklı bir sutun açıyor ve hergün o sutuna +1 yapıyor. Tek istediğim bunu nasıl php ile gösterebilirim. yada sorguda kullanabilirim.

    $hiti=mysql_query("select * from hits where video_id='$video_id' and gun='$gun' and ay='$ay' and yil='$yil' "); 
    $hital=mysql_fetch_array($hiti);
    $hit=$hital["hit"];