• 10-01-2016, 14:11:05
    #1
    Selam,
    Yine kafamın yandığı bir gündeyiz Neyse konumuza geçelim,

    APİ sistemi yazmaktayım, Normalde verileri JSON çıktısı vererek başka bir sayfadan alıp charts'a basıyorum. Lakin söyle bir sorunla karşı karşıyayım;

    JSON çıktımız aşağıdaki gibi,

    [{"date":"2016-01-01","value":13},
    {"date":"2016-01-03","value":115},
    {"date":"2016-01-09","value":323},
    {"date":"2016-01-01","value":54},
    {"date":"2016-01-03","value":134},
    {"date":"2016-01-09","value":303}]
    Bu verilerin date kısmını explode ederek Yıl-Ay-Gün olarak basıyorum, Normalde veritabanından Yıl-Ay-Gün Saat-Saniye türünde kayıtlı. Ben şimdi aynı tarihde olan verilerin sayısını almak istiyorum. Misal biraz önce demiştim ya, Yıl-Ay-Gün şeklinde alıyorum diye. Bizi şuanda veritabanındaki Saat-Saniye ilgilendirmiyor. Biz Yıl-Ay-Gün e bakaraktan aynı tarihler varsa 0 diye bir sayımız olsun her aynı tarihte bu sayı artsın.

    Örn.

    Veritabanında, iki adet "2016-01-09" verisi var. Bana 2 sayısını versin istiyorum. Bu iki sayısıda JSON çıktısındaki value ya atanacak. Bu şekilde döngü ile çekilen verileri sorgulasın ve çekilen verinin aynısı varsa veritabanında kaç tane var onun sayısını versin. Lakin belirttiğim gibi veritabanında Yıl-Ay-Gün Saat:Saniye şekline kayıtlı veri ve explode edip Yıl-Ay-Gün şeklinde bastırıyorum. Sonrasında Array ile JSON çıktısı alıyorum. JSON yapmadanda bu bahsettiğim işi yapabiliyorsa oda olur.

    Anlaşılmayan bir yer varsa bildirmeniz yeterli.
    Yardımlarınızı bekliyorum,
    Teşekkürler.
  • 10-01-2016, 14:14:25
    #2
    Select tarih,count(*) from table where sart=veri group by tarih order by tarih asc


    Sent from my iPhone using Tapatalk - debiansys
  • 10-01-2016, 14:23:21
    #3
    debiansys adlı üyeden alıntı: mesajı görüntüle
    Select tarih,count(*) from table where sart=veri group by tarih order by tarih asc


    Sent from my iPhone using Tapatalk - debiansys
    Belirttiğim üzre, Veritabanında 2016-01-09 01:16:16 şeklinde veri var, Ve bu verileri ben explode ile 2016-01-09 şekline getirip bastırıyorum.
    Yani verdiğiniz sorgu işe yaramayacaktır. Çünkü veritabanında 2016-01-09 01:16:16 böyle bir veri maksimum 1 adet olur saat,dakika,saniye yi aldığı için.
  • 10-01-2016, 14:26:45
    #4
    Date_format(tarih,'%d-%m-%Y') ile alir ve gruplarsaniz veriyi olur


    Sent from my iPhone using Tapatalk - debiansys
  • 10-01-2016, 14:48:05
    #5
    SQL'de çözmeniz daha mantıklı olur, ama PHP çözümü için;

    <?php
    
    $dates = array(
      '2016-01-09 01:16:16',
      '2016-01-09 06:16:16',
      '2016-01-09 09:16:16',
      '2016-01-09 09:15:16',
      '2016-01-08 09:15:16',
      '2016-01-06 09:15:16',
      '2016-01-07 09:15:16',
      '2016-01-08 08:15:16',
    );
    
    $result = array();
    
    foreach ($dates as $date) {
      $date = DateTime::createFromFormat('Y-m-d H:i:s', $date)->format('Y-m-d');
    
      if (isset($result[$date])) {
        ++$result[$date];
      } else {
        $result[$date] = 1;
      }
    }
    
    array_walk($result, function(&$value, $key) {
      $value = array(
        'date' => $key,
        'value' => $value
      );
    });
    
    echo json_encode(array_values($result));