Mysql'da tablodaki verileri gruplara ayırarak toplama
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.
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.
id | musteri_id | musteri_tutar | odenen_tutar |
---|---|---|---|
1 | 1 | 50 | 25 |
2 | 1 | 20 | 10 |
2 | 2 | 40 | 20 |
2 | 3 | 60 | 15 |
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_borc | toplam_odenen_tutar | musteri_id |
---|---|---|
70 | 35 | 1 |
40 | 20 | 2 |
60 | 15 | 3 |
ş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