• 21-12-2008, 09:49:15
    #1
    Veritabanı bu formatta

    CREATE TABLE `siparisler` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `siparis_no` int(10) unsigned default NULL,
      `urun_adi` varchar(200) default NULL,
      `adet` tinyint(3) default NULL,
      `tarih` datetime default NULL,
      KEY `id` (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=9 ;
    
    #
    # Tablo döküm verisi `siparisler`
    #
    
    INSERT INTO `siparisler` VALUES (1, 57, 'muz', 1, '2008-10-30 22:36:34');
    INSERT INTO `siparisler` VALUES (2, 57, 'elma3', 1, '2008-10-30 22:36:34');
    INSERT INTO `siparisler` VALUES (3, 59, 'elma3', 1, '2008-11-05 21:24:01');
    INSERT INTO `siparisler` VALUES (4, 60, 'elma2', 1, '2008-11-06 18:01:49');
    INSERT INTO `siparisler` VALUES (5, 61, 'elma2', 1, '2008-11-28 19:43:28');
    INSERT INTO `siparisler` VALUES (6, 62, 'elma2', 1, '2008-11-28 19:52:52');
    INSERT INTO `siparisler` VALUES (7, 63, 'elma3', 1, '2008-12-04 23:44:41');
    INSERT INTO `siparisler` VALUES (8, 64, 'elma3', 1, '2008-12-04 23:50:46');
    Veritabanındaki Tarih hücre alanı datetime olduğu için saat saniye falanda yazıyor.
    Soru şu:
    Benden Aylık rapor sayfası hazırlamam isteniyor. Günlük Satış rakamlarını nasıl ekrana basabilirim.
    28-11-2008 (3) satış gibi

    Şunu denedim ama saat saniye olduğu için tablo alanında dogru sonucu alamıyorum.

    SELECT tarih, COUNT(tarih) AS count
    FROM siparisler where (tarih BETWEEN '2008-11-01' and '2008-12-31')
    GROUP BY tarih
  • 21-12-2008, 10:07:52
    #2
    Üyeliği durduruldu
    Radmin şöyle olması gerekiyor . Denedikten sonra haber verirsen...
    SELECT tarih, COUNT(tarih) FROM siparisler 
    where tarih BETWEEN '2008-11-01' and '2008-12-31'
    GROUP BY tarih
  • 21-12-2008, 10:49:37
    #3
    şu şekilde istediğin sonucu elde edebilirsin.

    SELECT DATE(tarih), COUNT(*) AS count 
    FROM siparisler where tarih BETWEEN '2008-11-01' and '2008-12-31' 
    GROUP BY DATE(tarih)
  • 21-12-2008, 10:52:08
    #4
    SNaRe adlı üyeden alıntı: mesajı görüntüle
    Radmin şöyle olması gerekiyor . Denedikten sonra haber verirsen...
    SELECT tarih, COUNT(tarih) FROM siparisler 
    where tarih BETWEEN '2008-11-01' and '2008-12-31'
    GROUP BY tarih
    Bu sorgular dogru aslında ama eger tarih hücre alanı DATE olsaydı çalışıyordu ama sorun olan tarih alanının içinde TIME degerininde olması. Bu sebeble farklı saatlerde yapılan siparişleri aynı günün içine nasıl group by yaparız bunu çözemiyorum. Aklıma gelen tek yöntem DATETIME hücre alanını SELECt CAST ile char(10) şekline çevirip çekmek ama onuda tam olarak yazamıyorum. Yada başka bir fonksiyon varsa bu işin onu arıyorum. Daha önce başına böyle bir sorun gelen vardır belki diye yazdım

    Çıktı şu şekilde oluyor seninkininde. Aynı günleri gruplamıyor çünkü saatleri farklı:

    2008-11-05 21:24:01- (1)
    2008-11-06 18:01:49- (1)
    2008-11-28 19:43:28- (1)
    2008-11-28 19:52:52- (1)

    2008-12-04 23:44:41- (1)
    2008-12-04 23:50:46- (1)
  • 21-12-2008, 12:12:56
    #5
    Alıntı
    SELECT tarih,DAYOFMONTH(tarih) as gun, COUNT(id) FROM siparisler
    where MONTH(tarih)='Hangi ayı istiyorsan buraya sayı olarak yaz'
    GROUP BY gun
    Not:
    1.Denemedim ama çalışması lazım
    2.Gruplama mantığına göre o gün için verilen ilk siparişi ve o gün toplam sipariş sayısını verir
    Mantığı anladın sanıyorum sorguyu kendine göre geliştirebilirsin sanıyorum
    kolay gelsin
  • 21-12-2008, 12:16:34
    #6
    Üyeliği durduruldu
    SELECT DATE(tarih), COUNT(tarih) AS count
    FROM siparisler where (tarih BETWEEN '2008-11-01' and '2008-12-31')
    GROUP BY DATE(tarih)

    DATE(tarih) count
    2008-11-05 1
    2008-11-06 1
    2008-11-28 2
    2008-12-04 2



    count yerine sum daha iyi olabilir ...
    SELECT DATE( tarih ) as tarih , sum( adet ) AS count
    FROM siparisler
    WHERE (
    tarih
    BETWEEN '2008-11-01'
    AND '2008-12-31'
    )
    GROUP BY DATE(tarih)
  • 21-12-2008, 12:26:35
    #7
    teşekkürler