• 21-09-2022, 19:03:43
    #1
    Selamlar,
    PHP ile küçük bir anket sistemi hazırladık.
    Yemekhaneye anket sisteminin olduğu lokasyonu bir tabletin üstünde açıp, 2 buton koyduk ve bu butonların birine tıklandığında "1" değeri diğerine bastığında ise "3" değeri alıyor.
    Database yapısı şu şekilde;

    Şu şekilde ise günlük rapora ulaşabiliyorum;

    Bu ulaşmış olduğum raporu bulunduğumuz ayın tüm günleri için hazırlamak istiyorum fakat mantığını oturtturamadım.
    Mevcut günlük raporu ise şu kod ile çekiyorum;
        <h3><b><?php echo $date; ?></b> Tarihinin Sonuçları</h3>
    
        <?php
    
        $sorgu = $db->prepare("SELECT COUNT(*) FROM yemekhane_anket WHERE day(tarih) = day(CURDATE())");
        $sorgu->execute();
        $say = $sorgu->fetchColumn();
        echo '<h3 style="border-bottom: 1px solid black;">Toplam <b>'. $say .' kişi</b> oy kullanmıştır.</h3></br>';
    
        $sorgu = $db->prepare("SELECT COUNT(*) FROM yemekhane_anket WHERE day(tarih) = day(CURDATE()) AND memnuniyet_durumu = '1'");
        $sorgu->execute();
        $say1 = $sorgu->fetchColumn();
    
        $sorgu = $db->prepare("SELECT COUNT(*) FROM yemekhane_anket WHERE day(tarih) = day(CURDATE()) AND memnuniyet_durumu = '2'");
        $sorgu->execute();
        $say2 = $sorgu->fetchColumn();
    
        $sorgu = $db->prepare("SELECT COUNT(*) FROM yemekhane_anket WHERE day(tarih) = day(CURDATE()) AND memnuniyet_durumu = '3'");
        $sorgu->execute();
        $say3 = $sorgu->fetchColumn();
    
        ?>
    
        <?php
    
        //  $begen_yuzde = $say1 * 100/$say;
        //  $belirsiz_yuzde = $say2 * 100/$say;
        //  $kotu_yuzde = $say3 * 100/$say;
    
                $begen_yuzde = $say1;
                if ($begen_yuzde > 0) {
                    $begen_yuzde_orani = round($say1 * 100/$say);
                } else {
                                            
                }
                                        
                $belirsiz_yuzde = $say2;
                if ($belirsiz_yuzde > 0) {
                    $belirsiz_yuzde_orani = round($say2 * 100/$say);
                } else {
    
                }
    
                $kotu_yuzde = $say3;
                if ($kotu_yuzde > 0) {
                    $kotu_yuzde_orani = round($say3 * 100/$say);
                } else {
                    
                }
    
        ?>
    
        <h3>Beğeni Oranı</h3>
        <div class="progress">
          <div class="progress-bar bg-success" role="progressbar" style="width: <?php echo ($begen_yuzde_orani) ?>%; " aria-valuenow="<?php echo ($begen_yuzde_orani) ?>" aria-valuemin="0" aria-valuemax="100">%<?php echo ($begen_yuzde_orani) ?></div>
        </div>
    
        <h3>İyileştirilmeli Oranı</h3>
        <div class="progress" style="margin-bottom: 30px;">
          <div class="progress-bar bg-danger" role="progressbar" style="width: <?php echo ($kotu_yuzde_orani) ?>%; " aria-valuenow="<?php echo ($kotu_yuzde_orani) ?>" aria-valuemin="0" aria-valuemax="100">%<?php echo ($kotu_yuzde_orani) ?></div>
        </div>
  • 21-09-2022, 19:16:34
    #2
    Tarihi time çevir timedan gün ay yil böl sütunlar aç döngüye update ettir yeni eklemelerdede gün ay yil bas 10 dk bitirirsin böylece.
  • 21-09-2022, 19:17:15
    #3
    Grup by mı demek istediğiniz acaba? Biraz daha açar mısınız?
  • 21-09-2022, 19:21:58
    #4
    yahyaozinanir adlı üyeden alıntı: mesajı görüntüle
    Tarihi time çevir timedan gün ay yil böl sütunlar aç döngüye update ettir yeni eklemelerdede gün ay yil bas 10 dk bitirirsin böylece.
    İlginiz için teşekkürler,
    PHP konusunda acemi olduğum için pek algılayamadım.
    Daha basit bir yöntemi var mıdır?
    Canozkan adlı üyeden alıntı: mesajı görüntüle
    Grup by mı demek istediğiniz acaba? Biraz daha açar mısınız?
    Yapmak istediğim işlemi şablon halinde düşünürsek şu şekilde bir tablo elde etmek istiyorum;
  • 21-09-2022, 19:24:49
    #5
    turansonkaya adlı üyeden alıntı: mesajı görüntüle
    İlginiz için teşekkürler,
    PHP konusunda acemi olduğum için pek algılayamadım.
    Daha basit bir yöntemi var mıdır?

    Yapmak istediğim işlemi şablon halinde düşünürsek şu şekilde bir tablo elde etmek istiyorum;
    DISTINCT veya Group By ikisinden biriyle bu sonucu elde edebilirsiniz.

    1 - Tarihi yalın bırakın (saati kaldırın)

    2- Bu tarihte kullanılan oyları tespit edin ortalamanızı değişkenlere aktarın
    3- Hayırlı olsun

    Pm'den anydesk iletirseniz bi göz atarım
  • 21-09-2022, 19:28:08
    #6
    Tek satırlık SQL sorgusu ile sonucu alabilirsiniz, 1 saat içinde cevap gelmezse yazarım konuya hocam müsait olunca.
  • 21-09-2022, 19:28:20
    #7
    turansonkaya adlı üyeden alıntı: mesajı görüntüle
    İlginiz için teşekkürler,
    PHP konusunda acemi olduğum için pek algılayamadım.
    Daha basit bir yöntemi var mıdır?

    Yapmak istediğim işlemi şablon halinde düşünürsek şu şekilde bir tablo elde etmek istiyorum;
    Hocam elimde 2 ayrı tablo olsun dersen çok kolay aslında şimdi bir tablo oluştur TimeID day month year ve count sutünları koy daha sonra var olan tabloyu sorguyla döngüye al vt gelen tarihi time çevir ve bu time ise day month year olarak parçala daha sonra oluşturmuş olduğun tabloda sorgu yap bu tatihte veeri varsa count+1 yap yoksa o tarihe count 1 olarak ekler en kolay haliyle
  • 21-09-2022, 20:46:02
    #8
    SELECT
    DATE_FORMAT(tarih,'%d-%m-%Y') AS tarih,
    count(*) as kullanilan_oy,
    COUNT(CASE WHEN memnuniyet_durumu = 1 THEN 1 END) as begenen,
    COUNT(CASE WHEN memnuniyet_durumu = 2 THEN 1 END) as iyilestirmeli
    FROM yemekhane_anket
    GROUP BY DATE(tarih);