Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Tabloda Toplama

Konu, 'PHP' kısmında vurkun tarafından paylaşıldı.

  1. vurkun

    vurkun Üye

    Kayıt:
    2 Mart 2007
    Mesajlar:
    31
    Beğenilen Mesajlar:
    0
    Selamlar,
    İş yerimiz için basit bir scprit hazırlıyorum herşey tamam ama bir konuda takıldım.
    [​IMG]
    Ektede görüldüğü üzere firmanın işlemlerini veritabanından çekip döngü ile listeliyorum. Alınan ödeme, kesilen ödeme vs vs. Bakiye kısmına kırmızı ile yazdığım toplama işlemini bir türlü yaptıramadım. Alt satırdaki bakiye +- üstteki alacak borç miktarı. Böyle bir class varmı. Basit bir örnek kod yazabilecek varmı?
     
  2. MaviAteş

    MaviAteş Aktif Üye

    Kayıt:
    23 Mart 2007
    Mesajlar:
    440
    Beğenilen Mesajlar:
    5
    Meslek:
    Bilgisayar Sistemleri Öğretmeni
    Şehir:
    Başakşahir, İstanbul
    SELECT *, (alacak - borc) as bakiye FROM tablo
     
  3. vurkun

    vurkun Üye

    Kayıt:
    2 Mart 2007
    Mesajlar:
    31
    Beğenilen Mesajlar:
    0
    PHP taraflı bir çözüm değilde daha çok tablo üzerinde bir işlem yaptırmam gerekiyor. Sanırım konuyu JS kısmında açmalıydım.
     
  4. vurkun

    vurkun Üye

    Kayıt:
    2 Mart 2007
    Mesajlar:
    31
    Beğenilen Mesajlar:
    0
    Aslında istediğim şu;

    Kod:
    SELECT faturalar.faturano, faturalar.faturatarih, faturalar.firma, faturalar.tutar, faturalar.kdv8, faturalar.kdv18,  faturalar.birim, faturalar.tip, firmalar.id, firmalar.gorunenad FROM faturalar INNER JOIN firmalar ON (firmalar.id=faturalar.firma) WHERE firmalar.id =? and STR_TO_DATE(faturalar.faturatarih,'%d.%m.%Y') >=? and STR_TO_DATE(faturalar.faturatarih,'%d.%m.%Y') <=? ORDER BY STR_TO_DATE(faturalar.faturatarih,'%d.%m.%Y') DESC
    Bu sorgu ile istediğim tarih aralığında listeleme yapabiliyorum. faturalar.tip sütunu 1 ise alacak 2 ise borç tipini temsil ediyor. Başlarında + yada - ibaresi yok. Hepsi pozitif.

    İf else ilede tablomda alacak ve borç sütunlarına basabiliyorum. Ama toplatamıyorum.Yukarıdaki kodu nasıl değiştirebilirim.
     
    Son düzenleme: 22 Şubat 2018
  5. gk

    gk Üye

    Kayıt:
    24 Aralık 2009
    Mesajlar:
    146
    Beğenilen Mesajlar:
    21
    Meslek:
    Yazılım Geliştirici
    Şehir:
    İstanbul
    Toplam almak için SUM() fonksiyonu kullanılır, koşullu toplam almak için SUM() fonksiyonu içinde CASE ifadesini kullanabilirsiniz :
    Kod:
    SUM(CASE faturalar.tip WHEN 1 THEN faturalar.tutar ELSE -faturalar.tutar END) AS tutar
    
    gibi...
     
  6. vurkun

    vurkun Üye

    Kayıt:
    2 Mart 2007
    Mesajlar:
    31
    Beğenilen Mesajlar:
    0
    Peki aynı sorguda bir önceki faturalar.tutar sonucunu nasıl alabilirim. Ozaman sorumunda cevabını bulmuş olacağım.
     
  7. gk

    gk Üye

    Kayıt:
    24 Aralık 2009
    Mesajlar:
    146
    Beğenilen Mesajlar:
    21
    Meslek:
    Yazılım Geliştirici
    Şehir:
    İstanbul
    Ne yapmak istediğinizi tam anlamadım ama belki şöyle bir kullanım işinizi görebilir :
    Kod:
    SELECT *, (SELECT tutar FROM faturalar WHERE KOŞULLAR) AS oncekitutar FROM faturalar
    
     
  8. vurkun

    vurkun Üye

    Kayıt:
    2 Mart 2007
    Mesajlar:
    31
    Beğenilen Mesajlar:
    0
    Aslında yapmak istediğim ilk mesajdaki resimdeki gibi toplama yaptırma. Bir önceki satırla toplama çıkartma yaptırabilmek.
     
  9. MaviAteş

    MaviAteş Aktif Üye

    Kayıt:
    23 Mart 2007
    Mesajlar:
    440
    Beğenilen Mesajlar:
    5
    Meslek:
    Bilgisayar Sistemleri Öğretmeni
    Şehir:
    Başakşahir, İstanbul
    İlk mesajınızdaki resim, mysql veritabanındaki tablo yapınızın kendisi mi? Yoksa veritabanı tablosunda daha az sütun var fakat bu şekilde mi göstermek istiyorsunuz?

    dediğiniz için, veritabanı tablonuzda resimde gözükenden daha az sütun olduğunu, görsel anlamdaki tablo (<table><tr><td> ) üzerinde istediğiniz sonucu almanın yeterli olduğunu anlıyorum.
    Eğer böyleyse verileri php ile istediğiniz hale getirmenin ne zararı var?

    Kısaca, elimizdeki veri ne, siz ne istiyorsunuz?
     
  10. vurkun

    vurkun Üye

    Kayıt:
    2 Mart 2007
    Mesajlar:
    31
    Beğenilen Mesajlar:
    0
    MaviAteş,
    veritabanı tablosunda daha fazla veri var. Ama bakiye ile ilgili olarak tuttuğum kayıtlar şöyle;
    Firma ID
    Fatura Tarihi
    Fatura Tipi (1 giden fatura, 2 gelen fatura)
    Fatura Tutarı
    Fatura Birimi (TL,USD ve Euro)

    Daha sonra ben if else ile fatura tipine ve fatura birimine göre ilk resimdeki tablo şeklinde basabiliyorum. TL olanlar tl kısmına Usd olanlar usd kısmına vs vs. Fatura tipine görede alacak veya borç kısmına yazabiliyorum. bunda bir sıkıntım yok. Bana 2 şekilde yardımcı olabilirsin.

    1. yöntem olarak
    Bana SQL Sorgusu ile aldığım sonuçta bir önceki firmaya ait satırı alabileceğim bir sql sorgusu verebilirmisin. Yani

    Kod:
    SELECT *  FROM faturalar  WHERE firmaid =? and STR_TO_DATE(faturatarih,'%d.%m.%Y') >=? and STR_TO_DATE(.faturatarih,'%d.%m.%Y') <=? ORDER BY STR_TO_DATE(faturatarih,'%d.%m.%Y') DESC
    $faturalistesi-> execute(array($firmaid,$tarih1convert, $tarih2convert ));
    $faturalar = $faturalistesi->fetchALL(PDO::FETCH_ASSOC);
    Bu sorguyu
    Kod:
    foreach($faturalar as $row_faturalar)
    ile bastığımda çıkan sonuçta tabloya yazdığımd bir önceki yada sonraki satırı aynı satıra nasıl yazabilirim.

    2.yöntem olarak
    JS ile bastığım tabloda resimde gösterdiğim gibi bir toplama yapabilirmiyim.

    [​IMG]
     
    Son düzenleme: 25 Şubat 2018
  11. MaviAteş

    MaviAteş Aktif Üye

    Kayıt:
    23 Mart 2007
    Mesajlar:
    440
    Beğenilen Mesajlar:
    5
    Meslek:
    Bilgisayar Sistemleri Öğretmeni
    Şehir:
    Başakşahir, İstanbul
    Anlattıklarınızdan ve ilk mesajdaki resmi tekrar inceleyince, kırmızıyla işaretlediğiniz yerlerin toplanıp, çıkartılarak bulunduğunu farkettim.

    foreach ile her satır veriyi okurken, kendisinden önceki faturaları toplayıp, çıkartarak, güncel bakiyeyi bulmasını istiyorsunuz.
    Bu arada Para Biriminden dolayı toplama işlemini, para birimine göre yapmak gerekiyor.

    PHP:
    <?php
    /*
    Fatura Tipi (1 giden fatura, 2 gelen fatura)
    Fatura Tutarı
    Fatura Birimi (TL,USD ve Euro)
    */
    foreach($faturalar as $row_faturalar)
    {
       
    if(
    $row_faturalar['FaturaTipi']==1)
          
    $Bakiye[$row_faturalar['faturaBirimi']]=$Bakiye[$row_faturalar['faturaBirimi']]+$row_faturalar['FaturaTutarı'];
        elseif(
    $row_faturalar['FaturaTipi']==2)
          
    $Bakiye[$row_faturalar['faturaBirimi']]=$Bakiye[$row_faturalar['faturaBirimi']]-$row_faturalar['FaturaTutarı'];
    ?>
    <tr>
      <td><?= $Bakiye['TL']; ?></td>   <td><?= $Bakiye['USD']; ?></td>   <td><?= $Bakiye['Euro']; ?></td>
    </tr>
    <?php
    }
    ?>
     
    Son düzenleme: 27 Şubat 2018