Php ile mysqlden 3 tablodan Veri çekme ve 2 tablonun toplamını almak hk!
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'];
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
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.
<?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.
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.