v2.5.2
Giriş yap

Mysql'da tablodaki verileri gruplara ayırarak toplama

erdem
7,041 defa görüntülendi

Merhaba mysql da bir tablo oluşturdum tablo adı "musteri" tablodaki ödeme listesi "musteri_tutar" bir de ödedi,ödemedi olarak belirlediğim "musteri_durum" var
ben toplamı hesaplamak istiyorum fakat ödenen toplam ve ödenmeyen toplam olarak ayrı ayrı yazmak istiyorum.

<?php
  
  $Fiyat=$db->prepare("SELECT SUM(musteri_tutar) AS sayi FROM musteri");
   $Fiyat->execute();
  $FiyatYaz= $Fiyat->fetch(PDO::FETCH_ASSOC);
  echo "Toplam Para: ".$FiyatYaz['sayi']." TL";

  ?>

 ?>

yukarıdaki verdiğim kodu yazdığımda hepsinin toplamına ulaşıyorum ama yapmak istediğim ödenen ve ödenmeyenleri birbirinden ayırmak.

<?php
  
  bla bla bla 
  
  if (bla bla) {
    echo echo "Ödenen Toplam Para:  ".$FiyatYaz['sayi']." TL";
     }else {
         echo "Ödenmeyen Toplam Para: ".$FiyatYaz['sayi']." TL";
     }

  ?>

 ?>

yukarda gösterdiğime benzer bi kod yapısı olmasını istiyorum umarım kafa karıştırmamışımdır.

arcface
1640 gün önce

Direk senin kodunu alıntıladğım için echo echo yazmışsın görmedim büyük ihtimal onun hatasını veriyordur.

şimdi tablo id | musteri_tutar | musteri_durum bu 3 sütündan oluşuyor ise başta büyük bir yanlışın var kullanıcıları nerde tutuyorsun sorusu çıkıyor ortaya.

Ben yapını söyle düşündüm ona göre söyledim id | musteri_id | musteri_tutar | musteri_durum bu tablonda müşteri her borç yazdırdığında bir satır ekleniyor diye düşündüm.

Sana önerim şu müşteri durumu iptal et odenen_tutar diye bir alan yap ödenen tutarı buraya yaz yani yapın şöyle görünecek.

idmusteri_idmusteri_tutarodenen_tutar
115025
212010
224020
236015

yapın eğer böyle olur ise örnek tablo da verdiğim mesela 1 numaralı müşterinin toplam borcu 70 ₺ ödediği toplam borç miktarı ise 35 ₺

Bu mantıkta olmalı ozaman şöyle bir sorgu istediğin sonucu alabilirsin.


    SELECT 
        SUM(musteri_tutar) as toplam_borc,
        SUM(odenen_tutar) as toplam_odenen_tutar,
        musteri_id
    FROM
        musteri 
    GROUP_BY musteri_id

eğer sorgun böyle olur ise bunun çıktısı sana şunu verecek

toplam_borctoplam_odenen_tutarmusteri_id
70351
40202
60153

şeklinde bir çıktı verecektir.

böylelikle hangi müşterinin ne kadar toplam borcu var ve bu borcun ne kadarını ödediğini görebilirsin.

Bunun php'de kullanımı nasıl olacak peki.

<?php

$sorgu = $db->prepare(
    'SELECT SUM(musteri_tutar) as toplam_borc,
    SUM(odenen_tutar) as toplam_odenen_tutar,
    musteri_id
    FROM musteri GROUP_BY musteri_id'
);

$sorgu->execute();

$veriler = $sorgu->fetchAll(PDO::FETCH_ASSOC);

foreach($veriler as $sutun){
    echo 'Müşteri Numarası: '.$sutun['musteri_id'].PHP_EOL;
    echo 'Toplam Tutar: '.$sutun['toplam_borc'].PHP_EOL;
    echo 'Ödenen Toplam Tutar: '.$sutun['toplam_odenen_tutar'].'<hr>';
}

?>

Bunun çıktısı da bu şekilde;

Müşteri Numarası: 1
Toplam Tutar: 70
Ödenen Toplam Tutar: 35


Müşteri Numarası: 2
Toplam Tutar: 40
Ödenen Toplam Tutar: 20


Müşteri Numarası: 3
Toplam Tutar: 60
Ödenen Toplam Tutar: 15