• 14-04-2015, 20:51:37
    #10
    Kimlik doğrulama veya yönetimden onay bekliyor.
    adme adlı üyeden alıntı: mesajı görüntüle
    $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"];
    "select * from madvideo INNER JOIN hits ON madvideo.id = hits.video_id where yil = '2015' order by hits.hit desc"
    bu şekilde yapabildim ama sorun şu ki aynı videoyu farklı günlerden gösteriyor yani demem o ki 2015 yılının toplam hiti değilde 2015 olan bütün videolar gözüküyor
  • 14-04-2015, 23:18:17
    #11
    Kimlik doğrulama veya yönetimden onay bekliyor.
    ReLegolaS adlı üyeden alıntı: mesajı görüntüle
    "select * from madvideo INNER JOIN hits ON madvideo.id = hits.video_id where yil = '2015' order by hits.hit desc"
    bu şekilde yapabildim ama sorun şu ki aynı videoyu farklı günlerden gösteriyor yani demem o ki 2015 yılının toplam hiti değilde 2015 olan bütün videolar gözüküyor
    gün sonunda hepsinin toplandığı bir yer var mı ? yani mesela dün ayın 13'üydü gün boyu 5 kişi izledi aylık 20 yıl kısmı da 50 olsun. ayın 14'ünün kaydı nasıl başlıyor ? hep 0'dan mı ?
    eğer hep 0'sa tüm günlerin toplamını alırsın

    $islem = "SELECT hit SUM(hit) FROM hits where  yil="2015" GROUP BY video_id";
    $sonuc = mysql_query($islem) or die(mysql_error());
    while($row = mysql_fetch_array($sonuc)){
    $toplamhit = $row['SUM(hit)'] ;
    }
    $hesapla = mysql_num_rows($sonuc) ;
    echo "$toplamhit" ; // 2015 yılında gün satırına yazılanların tamamını toplar
  • 15-04-2015, 01:00:06
    #12
    ylv
    Üyeliği durduruldu
    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");,
    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
  • 15-04-2015, 13:26:29
    #13
    ylv adlı üyeden alıntı: mesajı görüntüle
    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
    ben mi yanlış anladım yoksa bu şekilde update ettiğinde her seferinde tarihi değiştirmiş olacaksın. tarih sürekli değişip hep bugünü yazarsa nasıl son 7 günü alabilirsin ki ?
  • 15-04-2015, 14:16:31
    #14
    ylv
    Üyeliği durduruldu
    adme adlı üyeden alıntı: mesajı görüntüle
    ben mi yanlış anladım yoksa bu şekilde update ettiğinde her seferinde tarihi değiştirmiş olacaksın. tarih sürekli değişip hep bugünü yazarsa nasıl son 7 günü alabilirsin ki ?
    her video için hergün 1 sütun açılıyor bu yapıda. her seferinde tarih değişmez tarih 24 saatte bir değişir ve bir önceki günün satırı silinmez. sürekli aynı video id ve aynı tarih için veri girişi yapamazsın (mesajımdaki primary key'e dikkat edin). 1 kere giriş yaparsın sonra satır üzerinde hit sütununun değerini +1 şeklinde update yaparsın.
  • 16-04-2015, 07:04:14
    #15
    ylv adlı üyeden alıntı: mesajı görüntüle
    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
  • 16-04-2015, 15:12:58
    #16
    ylv
    Üyeliği durduruldu
    ReLegolaS adlı üyeden alıntı: mesajı görüntüle
    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
    öncelikle biraz bilgi veriyim.

    select ifadesinden sonra group fonksiyonları kullanırsan sum,avg,min,max vs

    select min(sütun) from ...

    group by kullanmana gerek yok.

    ama sen gruplama fonksiyonu kullanırsan ve başka bir sütun seçersen

    select sutunx,min(sütun) from ... group by sutunx

    olarak yazmak zorundasın.

    sorguna gelicek olursak group by video_id ifadesi var ama select kısmında grup fonk. yok.
    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

    select video_id,sütun1,sütun2,vs..,sum(hit sütun adı) from madvideo INNER JOIN hit ON madvideo.id = hit.video_id WHERE video_id=$videoid && hit.tarih>DATE_ADD(DATE(NOW()),INTERVAL -7 DAY) group by video_id

    mysql buna izin vericek ama misal mssql de group by video_id,sütun1,sütun2 olarak yazılması gerekiyor diye biliyorum.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 15:12:58 -->-> Daha önceki mesaj 15:06:29 --

    ReLegolaS adlı üyeden alıntı: mesajı görüntüle
    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
    select video_id,sütun1,sütun2,vs..,sum(hit sütun adı) from madvideo INNER JOIN hit ON madvideo.id = hit.video_id WHERE video_id=$video_id && hit.tarih>DATE_ADD(DATE(NOW()),INTERVAL -7 DAY) group by video_id

    while döngüsü kullanmıcaksın bu sorgu için, tek satır veri alıcaksın.
  • 16-04-2015, 15:39:49
    #17
    ylv adlı üyeden alıntı: mesajı görüntüle
    öncelikle biraz bilgi veriyim.

    select ifadesinden sonra group fonksiyonları kullanırsan sum,avg,min,max vs

    select min(sütun) from ...

    group by kullanmana gerek yok.

    ama sen gruplama fonksiyonu kullanırsan ve başka bir sütun seçersen

    select sutunx,min(sütun) from ... group by sutunx

    olarak yazmak zorundasın.

    sorguna gelicek olursak group by video_id ifadesi var ama select kısmında grup fonk. yok.
    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

    select video_id,sütun1,sütun2,vs..,sum(hit sütun adı) from madvideo INNER JOIN hit ON madvideo.id = hit.video_id WHERE video_id=$videoid && hit.tarih>DATE_ADD(DATE(NOW()),INTERVAL -7 DAY) group by video_id

    mysql buna izin vericek ama misal mssql de group by video_id,sütun1,sütun2 olarak yazılması gerekiyor diye biliyorum.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 15:12:58 -->-> Daha önceki mesaj 15:06:29 --



    select video_id,sütun1,sütun2,vs..,sum(hit sütun adı) from madvideo INNER JOIN hit ON madvideo.id = hit.video_id WHERE video_id=$video_id && hit.tarih>DATE_ADD(DATE(NOW()),INTERVAL -7 DAY) group by video_id

    while döngüsü kullanmıcaksın bu sorgu için, tek satır veri alıcaksın.
    100 tane fln veri dönüşü olacak. whilesiz nasıl yapabilirim ki
  • 16-04-2015, 15:45:27
    #18
    ylv
    Üyeliği durduruldu
    ReLegolaS adlı üyeden alıntı: mesajı görüntüle
    100 tane fln veri dönüşü olacak. whilesiz nasıl yapabilirim ki
    yazdığım sorgu bir video için,

    sen video listesinden toplama ulaşıyım dersen video_id=$videoid bu şartı kaldırın.