gelen idlere eşdeğerleri Toplama
sepet tablosunda
id | uyeID | hizmetID |
---|---|---|
1 | 200 | 1,2 |
2 | 200 | 3,4 |
3 | 201 | 1,2,3,4 |
paket tablosu
id | adi | fiyat |
---|---|---|
1 | paket 1 | 200 |
2 | paket 1 | 100 |
3 | paket 1 | 500 |
4 | paket 1 | 450 |
$data = "";
$kdv = "";
$Guncel = db->prepare("SELECT * FROM sepet WHERE userID=?");
$Guncel->execute([$Ses->session("ID"))]); // 200 diye farz edelim.
foreach($Guncel->fetchAll(2) as $row):
$cc = 0;
$dd = $db->query("SELECT SUM(fiyat) as totalsa FROM ekhizmet WHERE id IN (".$row["hizmetID"].")")->fetchALL(2);
$data .= $cc += $dd[0]["totalsa"]; // 300 950
$kdv .= ($cc * ORAN) /100;
endforeach;
$sayfa = array(
"data" => $data,
"kdv" => $kdv
);
json_encode($sayfa);
sepetteki hizmetID ile eşleşen kayıtların toplamını bir türlü malamıyorum
1 tane içerik varken 1 tane topluyor sorun yok
fakat 2. içeriği eklediğimde ayrı ayrı toplama yapıyor
sonuc 300 950 değil 1250 olarak almak istiyorum yapamadım bir türlü.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (9)
Valla hiç hoşuma gitmese de bu sonuca ulaştırıyor. Daha kısasının olabileceğini düşündüğüm kodları uzun yazınca rahatsız oluyorum biraz :)
$query = $db->query("SELECT hizmetID FROM sepet WHERE uyeID = 200")->fetchAll(7);
$extraString = '';
if (count($query) > 1) {
for ($i = 1; $i < count($query); $i++)
$extraString .= " UNION SELECT SUM(fiyat) FROM ekhizmet WHERE id IN ({$query[$i]})";
}
$getTotal = $db->query("SELECT SUM(fiyat) FROM ekhizmet WHERE id IN ({$query[0]}) $extraString")->fetchAll(7);
$total = array_sum($getTotal); // 1200
@abdullahx
valla teşekkür ederim Abdullah
sorunsuz çalıştı fakat bu sefer bir detay kaldı :)
oda benim hatam kusuruma bakma düşünemedim o kısmı.
sepetteki ürünün hizmetID boş ise if ile count öncesi işlem yaptırdım oda yemedi bu seferde ilk gelen id nin kileri topladı gerisini toplamadı
!empty(hizmetID) yaptım count içine alarak dediğim gibi bu sefer de sadece ilk gelen veriyi topladı.
sepet söyle ise
id | uyeID | hizmetID |
---|---|---|
1 | 200 | 1,2 |
2 | 200 | 3,4 |
3 | 201 | 1,2,3,4 |
4 | 200 | null |
boş değer olunca getTotal bölümünde hata veriyor.
derken bu şekilde hallettim şuanlık bir sorun gözükmüyor teşekkür ederim tekrardan kardeşim aklına sağlık.
trabzona gelince çayını içerim yazın :) bu kadar yardımdan sonra birde çay ısmarlatayım rizeli olarak tammdır :)
$extraString = '';
if (count($query) > 1) {
for ($i = 1; $i < count($query); $i++)
if($query[$i] != null)
$extraString .= " UNION SELECT SUM(fiyat) FROM ekhizmet WHERE id IN (".$query[$i].")";
}
@serkan laf çarpmak için demedim yanlış anlama kardeşim.
hizmet ID leri tablodaki gibi 1,2,3,4 gibi tutuyorum
hizmetID leri tek tek sıralatıp o idlere göre fiyatları topla diyorum
haliyle aynı ID olunca onların sadece 1 tanesini toplama işleminin içine dahil ediyor.
yada ben seni anlamadım yada sen beni :)
üstüne ben sepete fiyat girmek istemediğim için böyle yaptım
fiyatları orjinal yerinden çekip işlem yaptırmak için.
sepete direk fiyat olarak girsem zaten işlem yaparken bunlarla uğraşmazdım can dost :)