v2.5.2
Giriş yap

gelen idlere eşdeğerleri Toplama

acemi
297 defa görüntülendi

sepet tablosunda

iduyeIDhizmetID
12001,2
22003,4
32011,2,3,4

paket tablosu

idadifiyat
1paket 1200
2paket 1100
3paket 1500
4paket 1450
    $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ü.

Cevap yaz
Cevaplar (9)
abdullahx
721 gün önce

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
720 gün önce

İlk sorguyu böyle düzenlersen olabilir

SELECT hizmetID FROM sepet WHERE uyeID = 200 AND hizmetID IS NOT NULL
acemi
720 gün önce

@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

iduyeIDhizmetID
12001,2
22003,4
32011,2,3,4
4200null

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].")";
    } 

acemi
721 gün önce

@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 :)

serkan
721 gün önce

@acemi ürünlerle alakalı değil zaten fiyat ile alakalı
ama neyse sen haklısın :)

acemi
721 gün önce

@serkan

ürünler ile alakalı bir durum değil kardeşim

teşekkür ederim ilgilendiğin için.

serkan
721 gün önce

ayni urunden toplama islemini sepette yapman gerekiyor ondan sonra db ye kaydetmen gerekir.

acemi
721 gün önce

@abdullahx

bu sefer söyle bir sorun çıkıyor

şimdi aynı id den 2 farklı üründe var ise
onu sadece 1 tane olarak algılıyor.
haliyle işlem yanlışa düşebiliyor.
atıyorum 1,4,2,4 yaparsam // 750 çıkıyor
halbuki 1200 çıkması gerekiyor.