v2.5.2
Giriş yap

Mysql'da tablodaki verileri gruplara ayırarak toplama

erdem
7,332 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.

Cevap yaz
Cevaplar (6)
smesut
1032 gün önce

bu şekildeki bir yapıda number_format($number, 2, ',', ' ') işlevini nasıl kullanabilirim .

benimde aşağıdaki şekilde sonuçları tablo şeklinde bastıran bir çalışmam var . ancak toplam sayıyı binlik ayraçlı şekilde bastıramıyorum.

   foreach ($data as $item)

    echo "<table border=1 cellspacing=0 cellpading=0 >

<tr> <td style='color:green' width=150px>$item[msg_S_0014]</td><td style width=150px>$item[msg_S_0785]<td style width=150px align=right >$item[stok_toplam]</font></td></tr>

</table>";

erdem
1874 gün önce

çok saol deneyip buraya yazcam sonuçları

arcface
1874 gün önce

GROUP_BY yazmışım o GROUP BY olacak direk kopyalama orayı düzeltirsin yorumu düzenle alanı olmadığı için düzenleyemedim.

arcface
1874 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

erdem
1874 gün önce

Cevabın için teşekkürler ben musteri_durum sütununu warchar tanımlandığı gibi (1) yazıp yaptım dediğine göre bir tane daha sütun açmam geriyor onudamı aynı şekilde açcam kafam baya karıştı?

benim tablom bu şekilde

idmusteri_tutarmusteri_durum
1501
2750

1=ödedi
0=ödemedi

acaba senin demek istediğin şumu

idmusteri_tutarmusteri_odeyenmusteri_odemeyen
15010
27501

bu arada senin yaptığın kodu yazdığımda Parse error: syntax error, unexpected 'echo' (T_ECHO) in C:\xampp\htdocs\Müsteri-paneli\index.php on line 88 hatasını verdi

arcface
1874 gün önce

Merhaba,

Soru biraz eksik kalmış anlamam için yardımcı ol lütfen. Şimdi sormak istediğin şey bir Müşteri tablon bulunuyor.
Bu tablo üzerinde musteri_tutar,musteri_durum olarak 2 adet konu ile alakalı sütün bulunuyor bu sütünların musteri_durum olanı 0 veya 1 şeklinde ödendi, ödenmedi gibi değer tutuyor.

Bu anladığım kadarı anlamadığım kısım ise musteri_tutar kısmı şimdi eğer musteri_durum alanında ödendi ve ödenmedi diye değer tutacaksan ödenen tutarı da tutacak bir sütün oluşturman gerekir yada ayrı bir tablo yaparak bunu ayrıştırman gerekir.

Soruya yazdığın örnek üzerinden bir çözüm sunayım.

 <?php 
 
     // İlk olarak sorgu da select ile sadece musteri_tutarını değil müsteri durumunuda alacaksın
    $Fiyat=$db->prepare("SELECT SUM(musteri_tutar) AS sayi,musteri_durum FROM musteri");
    $Fiyat->execute();
    $FiyatYaz= $Fiyat->fetch(PDO::FETCH_ASSOC);
    // daha sonra 
    if ($FiyatYaz['musteri_durum'] == 1) {
        echo echo "Ödenen Toplam Para:  ".$FiyatYaz['sayi']." TL";
    }else {
        echo "Ödenmeyen Toplam Para: ".$FiyatYaz['sayi']." TL";
    }

Bu şekilde bunu dediğim gibi gösterdiğin örneğe göre sunuyorum eğer istediğin bu ise bu şekilde yapabilirsin.