v2.5.2
Giriş yap

Php ile mysqlden 3 tablodan Veri çekme ve 2 tablonun toplamını almak hk!

ozcan
169 defa görüntülendi

Merhaba,

İlişkisel veritabanı tablosu oluşturdum ve detaylar aşağıdaki gibidir.

musteriler (Müşteri bilgilerini olduğu)
satislar (satış işlemlerini tutar girerek yapılyorum, ürünler yok! Müşteri tablosuna musteriID ile ilişkili)
tahsilatlar (Açık hesapların tutulduğu alan satışlar kısmı, tahsilatları musteriID olarak kayıt işlemi yapılıyor buraya, musteriID ilişkisel alan)

Rapor ekranı hazırladım, sorguyla alanları getiriyorum ama akrana bastığım zaman rakamlar 2 katı çıkıyor.
Yardımınıza ihtiyacım var.

    //  
  $sube= $_POST['magaza'];
  $satis=$baglan->prepare("SELECT 
                          satislar.musteriID,
                          satislar.satisTarihi,
                          satislar.subeID,
                          satislar.acikHesap as cariToplam,
                          subeler.ID as subeID,
                          subeler.aciklama,
                          musteriler.musteriAd,
                          sum(t.tutar) as tahsilat

                          FROM satislar
                          
                          INNER JOIN musteriler ON satislar.musteriID=musteriler.ID
                           INNER JOIN subeler ON satislar.subeID=subeler.ID
                           INNER JOIN tahsilatlar as t ON satislar.musteriID=t.tMusteriID
                           where  satislar.satisTarihi between ? and ? AND satislar.subeID='{$sube}' 
                           AND satislar.acikHesap > 0 
                           GROUP BY satislar.musteriID 
                            "); 
                   $satis->execute(array($basTarihi,$bitTarihi,));
   
                while($satislariGetir=$satis->fetch(PDO::FETCH_ASSOC)){
                $resim=$satislariGetir['resim'];
                $TC=$satislariGetir['musteriTc'];
                $ID=$satislariGetir['tMusteriID'];
                $mAd=$satislariGetir['musteriAd'];
                $mTelefon=$satislariGetir['musteriTelefon'];
                $acikHesapToplam2+=$satislariGetir['cariToplam'];
                $tahsilat=$satislariGetir['tahsilat'];
              

Cevap yaz
Cevaplar (4)
h4ckdr0
461 gün önce

Eğer sorgunuzda "GROUP BY satislar.musteriID" komutunu kullandıysanız ve hala rakamlar 2 katı çıkıyorsa, bu durumda $acikHesapToplam2 değişkenini sorgu sonucunu döngü içinde gezerek her satır için tek tek eklemeniz gerektiği anlamına gelir.

while($satislariGetir=$satis->fetch(PDO::FETCH_ASSOC)){
    $acikHesapToplam2 += $satislariGetir['cariToplam'];
    // ...
}

Yukarıdaki kod, her satır için cariToplam değerini $acikHesapToplam2 değişkenine ekleyecektir.

Ayrıca, sorgunuzda "GROUP BY satislar.musteriID" komutunu kullanarak satışları gruplandırmanız gerekmektedir. Ancak sorgunuzda acikHesapToplam2 değişkenini satislar tablosunda acikHesap alanından alıyorsunuz. Bu nedenle sorgunuzda acikHesapToplam2 değişkenini satislar tablosunda acikHesap alanının toplamını almak için SUM fonksiyonunu kullanmanız gerekmektedir.

SELECT SUM(satislar.acikHesap) as acikHesapToplam2 
FROM satislar
INNER JOIN musteriler ON satislar.musteriID=musteriler.ID
INNER JOIN subeler ON satislar.subeID=subeler.ID
INNER JOIN tahsilatlar as t ON satislar.musteriID=t.tMusteriID
where  satislar.satisTarihi between ? and ? AND satislar.subeID='{$sube}' 
AND satislar.acikHesap > 0 
GROUP BY satislar.musteriID 

Bu şekilde sorgunuzda acikHesapToplam2 değişkeni satislar tablosunda acikHesap alanının toplamını verecektir.

ozcan
461 gün önce
     <?php 
                                $satis4=$baglan->prepare("SELECT 
                                sum(t.tutar) as tutar2
                                
                                FROM tahsilatlar as t

                                where  t.tarih between ? and ? AND t.subeID='{$sube}' AND t.tMusteriID= $ID 
                               
                                GROUP BY t.tMusteriID;
                                                            "); 
                               $satis4->execute(array($basTarihi,$bitTarihi,));
                   
                                while($satislariGetir3=$satis4->fetch(PDO::FETCH_ASSOC)){
                                $tahsilatToplam=$satislariGetir3['tutar2'];
                              ?>      

Döngü içerisine bu şekilde satır kodu oluşturdum dün gece sorunu, cevaplar için teşekkür ederim.

h4ckdr0
461 gün önce

Rapor ekranınızda rakamların 2 katı çıkmasının nedeni, satislar tablosunda müşteri ID'si ile ilişkili olarak aynı müşteriye ait satışların birden fazla kez sayılması olabilir. Bu nedenle, sorgunuzda "GROUP BY satislar.musteriID" komutunu kullanarak müşteri ID'si baz alınarak satışları gruplandırmanız gerekmektedir. Ayrıca, sorgunuzda "sum(t.tutar) as tahsilat" komutunu kullanarak tahsilatların toplamını hesaplamaktasınız, bu nedenle tahsilatların birden fazla kez sayılmasına da neden olabilir. Bu durumda sorgunuzda "GROUP BY satislar.musteriID, t.tutar" komutunu kullanarak müşteri ID ve tutar baz alınarak satışları ve tahsilatları gruplandırmanız gerekmektedir.

ozcan
463 gün önce
    $acikHesapToplam2+=$satislariGetir['cariToplam'];
    
    $acikHesapToplam2=$satislariGetir['cariToplam'];

İki ayrı şekilde de denedim ama yine aynı