Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

mySql uzmanlık sorusu . sitede geçirilen en yoğun saatler

Merhaba,
geliştirdiğimiz bir sistemde şöyle bir ihtiyaç oldu.
sitedeki en yoğun girişlerin olduğu saatleri bulmak istiyorum

veritabanımda kullanıcıların giriş-çıkışları
(timestamp) olarak tutuluyor.

bu işlemi php ile halledebilirim ancak sql sorgusu ile bir yolu varmıdır diye merak ediyorum.

tablomdaki sütunlar.
usrid | giris | cikis

istediğim şey mesela son 1 hafta içinde en yoğun kullanıcı girişi hangi saatler arasında olmuş ?
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Cevaplar

  • erdemuzun adlı üyenin fotoğrafı
    11 yıl önce yazılmış
    10 cevap - 0 soru
    tarihleri timestamp olarak aldığından zaten bir çok şeyin temeli hazır tutulmuş.

    Şimdi yapman gerek..

    mysql_query("select * from bilgiler where timestamp<$tarih and timestamp>$tarih2");

    Şeklinde gün gün olarak ekrana bastırman,
    $tarih1 ve $tarih 2 yi form alanı ile yollarıtrsın ve yollatığın yerde

    11.02.1988 gibi tarihi direk timestamp formatına çevirtirsin.

    Bu sana geniş bir döküm verecektir.

    Aynı şeyi hafta bazında

    ay bazında felan da yapabilirsin burdan sana en yoğun saatleri her şeyi çıkartabilirsin.

    Umarım yardımcı olabilimişimdir.
    • freefox adlı üyenin fotoğrafı freefox
      teşekkürler ilgin için
      ama yazıda belirttiğim gibi işe php'yi bulaştırmadan yapmanın yolunu arıyorum. varsa tabi ?
      dediğin gibi php ile ben istediğim şeyi çıkartabiliyorum zaten :) derdim bunu sql sorgusu ile yapabilmek ?
      11 yıl önce yazılmış
  • kralmermi adlı üyenin fotoğrafı
    11 yıl önce yazılmış
    102 cevap - 6 soru
    biraz karmaşık ama yapilabilir birtane array olustur 24 verisi olan her veri bir saatlik sonra ona gore bir sorgu

    Örnek
    $array = array("2012-04-09 00:00:00 and"2012-04-09 00:59:59", "2012-04-09 01:00:00 and"2012-04-09 01:59:59");
    for($i=0; $i<count($array); $i++){
    echo "SELECT COUNT(*) FROM userlogin WHERE time BETWEEN".$array[$i]."<br";
    }

    iki dk içinde ancak bu kadar geldi aklima tarih kısmını kendi saat dilimine gore ayarlarsin olur diye düşünüyorum kolay gelsin.
  • xuma adlı üyenin fotoğrafı
    11 yıl önce yazılmış
    171 cevap - 1 soru
    Tam mantığı olmasada ;


     SELECT CONCAT(DATE_FORMAT(giris, '%Y-%m-%d %H'), ':00:00.000') AS saat,COUNT(*) AS sayi, AVG(*) AS ortalama FROM uyeler 
    WHERE giris BETWEEN '2012-04-01' AND '2012-05-09' GROUP BY CONCAT(DATE_FORMAT(giris, '%Y-%m-%d %H'), ':00:00.000') ORDER BY saat
    


    aslında aralığı otomatik almasını istiyorsak mysql ADDTIME ile bir haftalık aralık girilebilir.Elinde veri varsa test için eklersen deneyebiliriz.
    • freefox adlı üyenin fotoğrafı freefox
      Dostum örnek tablo aşağıda çok fazla veri yok birkaç günlük
      ama iş görür sanırsam
      
      
      CREATE TABLE IF NOT EXISTS `log` (
        `Id` int(11) NOT NULL AUTO_INCREMENT,
        `tckimlik` varchar(15) COLLATE utf8_turkish_ci NOT NULL,
        `giris` bigint(14) NOT NULL,
        `cikis` bigint(14) NOT NULL DEFAULT '0',
        PRIMARY KEY (`Id`)
      ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=29 ;
      
      --
      -- Tablo döküm verisi `log`
      --
      
      INSERT INTO `log` (`Id`, `tckimlik`, `giris`, `cikis`) VALUES
      (9, '00000000000', 1333650582, 1333650601),
      (11, '00000000000', 1333708752, 1333708801),
      (28, '00000000000', 1333966894, 1333969151),
      (27, '11111111111', 1333966840, 1333966885),
      (16, '00000000000', 1333814902, 1333815693),
      (17, '00000000000', 1333896636, 1333896681),
      (18, '00000000000', 1333953746, 1333954390),
      (19, '11111111111', 1333954393, 1333954402),
      (20, '00000000000', 1333954407, 1333958517),
      (21, '11111111111', 1333958521, 1333958525),
      (22, '00000000000', 1333958529, 1333958649),
      (23, '00000000000', 1333962883, 1333963102),
      (24, '00000000000', 1333963126, 1333964934),
      (25, '11111111111', 1333964939, 1333965124),
      (26, '00000000000', 1333965128, 1333966835);
      
      11 yıl önce yazılmış
    • xuma adlı üyenin fotoğrafı xuma
      Haftalık düzgün bir döküm için epeyi uğraşmak lazım ama yukarıda verdiğim örnek için düzenlenmiş sorgu için sonuçlar;
      SELECT CONCAT(DATE_FORMAT(FROM_UNIXTIME(giris),'%Y-%m-%d %H'), ':00:00.000') as saat ,COUNT(id) as sayi
      FROM log 
      WHERE DATE_FORMAT(FROM_UNIXTIME(giris), '%d-%m-%Y') BETWEEN '05-04-2012' AND '10-04-2012' 
      GROUP BY CONCAT(DATE_FORMAT(FROM_UNIXTIME(giris),'%Y-%m-%d %H'), ':00:00.000') ORDER BY saat
      -----------------------
      2012-04-05 21:00:00.00	1
      2012-04-06 13:00:00.00	1
      2012-04-07 19:00:00.00	1
      2012-04-08 17:00:00.00	1
      2012-04-09 09:00:00.00	3
      2012-04-09 11:00:00.00	2
      2012-04-09 12:00:00.00	4
      2012-04-09 13:00:00.00	2
      

      açıkcası güzel bir cevap gelirse bende merak ediyorum.Aklıma birkaç yöntem gelsede özellikle tarihlerin depolanma biçimi yüzünden gözüm korktu :)
      11 yıl önce yazılmış
    • freefox adlı üyenin fotoğrafı freefox
      ilgin için saol .
      dediğin gibi biraz daha uğraşmak lazım

      hatta iş biraz daha ileriye götürebilse .
      istediğimiz tarih veya tarih aralıklarında en yoğun girişlerin olduğu saatlari alabilsek . süper bir sorgu olur birçok kişinin aradığı bir çözüm olur.

      hadi uzmanlar çözüm üretin :)
      11 yıl önce yazılmış
  • efe4ka adlı üyenin fotoğrafı
    11 yıl önce yazılmış
    28 cevap - 1 soru
    select date_format( giris, '%H' ) as `saat` from logs group by date_format( gun, '%H' )
    order by count(*) desc burada saatlere göre en cok giriş yapılmış görebilirsiniz.
    • freefox adlı üyenin fotoğrafı freefox
      dostm yukarıda verdiğim tablo yapısına uygun hale getirebilemn münkünmü
      "gun" kısmı na ne yazmam gerekiyor tarihmi ? 10-04-2012- gibi
      bunu denedim ama herhangi bir sonuç döndürmedi
      11 yıl önce yazılmış