• 20-12-2019, 12:15:27
    #1
    merhaba arkadaşlar. bir sayfada 18 adet sorgu yapıyorum. yanlış veya doğru.
    bu sorguları azaltmak istiyorum.
    doğru yol varsa da öğrenmek istiyorum.

    Stok daki bu aya ait giriş yapılmış verileri çekliyor.
    <?php
    $biraylikgiris = $db->prepare("
    SELECT Sum(sip_urun_adedi) FROM siparis WHERE in_out='Giriş' AND sip_zaman >= NOW() - INTERVAL 1 month
    AND stok_id=:id ");
    $biraylikgiris->execute(array('id' => guvenlik($_POST['id']) ));
    $toplamstok = $biraylikgiris->fetchColumn();
    ?>
    Stok daki bu aya ait kaç kere giriş yapılmış verileri çekliyor.
    <?php
    $biraylikgiris = $db->prepare("
    SELECT COUNT(sip_urun_adedi) FROM siparis WHERE in_out='Giriş' AND sip_zaman >= NOW() - INTERVAL 1 month
    AND stok_id=:id ");
    $biraylikgiris->execute(array('id' => guvenlik($_POST['id']) ));
    $toplamstok = $biraylikgiris->fetchColumn();
    ?>
    Stoktaki bu aya ait giriş toplam alış tutarlarını çekiyor.
    <?php
    $biraylikgiris = $db->prepare("
    SELECT SUM(sip_birim_fiyati) FROM siparis WHERE in_out='Giriş' AND sip_zaman >= NOW() - INTERVAL 1 month
    AND stok_id=:id ");
    $biraylikgiris->execute(array('id' => guvenlik($_POST['id']) ));
    $toplamstok = $biraylikgiris->fetchColumn();
    ?>
    Ve Sorgular şöyle devam ediyor.
    Bu aya ait çıkışlar,
    geçen aya ait girişler
    geçen aya ait çıkışlar
    bu yıla ait girişler
    bu yıla ait çıkışlar.
  • 20-12-2019, 15:07:03
    #2
    Cache kullanabilirsiniz. Stok ile ilgili create işlemi olduğunda giriş ile ilgili cacheleri temizlersiniz, delete veya update işlemi olduğunda sisteminize gore çıkış cachelerini temizlersiniz.

    İstatistik bolümünü ayrı bir tabloda tutabilirsiniz. Aylık giriş/çıkış, yıllık giriş çıkışları her işlem olduğunda artacak şekilde event/listener ile güncelleyebilir veya daha performanslı olmasını istiyorsanız veritabanı tarafında trigger yazabilirsiniz.

    Projenize gore seçenekler artar ve kısalır..
  • 20-12-2019, 16:36:00
    #3
    coder63 adlı üyeden alıntı: mesajı görüntüle
    Cache kullanabilirsiniz. Stok ile ilgili create işlemi olduğunda giriş ile ilgili cacheleri temizlersiniz, delete veya update işlemi olduğunda sisteminize gore çıkış cachelerini temizlersiniz.

    İstatistik bolümünü ayrı bir tabloda tutabilirsiniz. Aylık giriş/çıkış, yıllık giriş çıkışları her işlem olduğunda artacak şekilde event/listener ile güncelleyebilir veya daha performanslı olmasını istiyorsanız veritabanı tarafında trigger yazabilirsiniz.

    Projenize gore seçenekler artar ve kısalır..
    18 tane ayrı ayrı sorgu yapmak yerine 1-2-3 sorguda halledebilirmiyiz?.

    sorgularda farklı olan ;
    Giriş ,Çıkış
    Bu ay, geçen ay, bu yıl

    sorgu içinde if kullanabilirmiyiz acaba ? sorgu sonucuna göre çıktı alabilirmiyiz?
  • 20-12-2019, 16:54:21
    #4
    Sql sorgularında tabi koşul işlemleri uygulayabilirsiniz. Aynı sorgu içinde farklı alanların sum sonucunu aldığınızı gorüyorum paylaştığınız orneklerde. Aşağıdaki gibi tek sorguda birden fazla alanın sum değerini alarak sorgu sayısını azaltabilirsiniz.

    $sonuc = $db->prepare("SELECT sum(sip_urun_adedi) as sum_sip_urun_adedi, sum(sip_birim_fiyati) as sum_sip_birim_fiyati FROM siparis WHERE in_out='Giriş' AND sip_zaman >= NOW() - INTERVAL 1 month
    AND stok_id=:id ");
  • 20-12-2019, 17:30:41
    #5
    coder63 adlı üyeden alıntı: mesajı görüntüle
    Sql sorgularında tabi koşul işlemleri uygulayabilirsiniz. Aynı sorgu içinde farklı alanların sum sonucunu aldığınızı gorüyorum paylaştığınız orneklerde. Aşağıdaki gibi tek sorguda birden fazla alanın sum değerini alarak sorgu sayısını azaltabilirsiniz.

    $sonuc = $db->prepare("SELECT sum(sip_urun_adedi) as sum_sip_urun_adedi, sum(sip_birim_fiyati) as sum_sip_birim_fiyati FROM siparis WHERE in_out='Giriş' AND sip_zaman >= NOW() - INTERVAL 1 month
    AND stok_id=:id ");
    evet aradğım bu kod hocam . peki hocam bu verileri çekerken nasıl ayırt yapacağız ?.
    2 tür veri eçekeceğiz ,
    1- sip_urun_adedi
    2-sip_birim_fiyati
    örnekleyebilirmisiniz rica etsem ?
  • 20-12-2019, 17:39:19
    #6
    omrumdely adlı üyeden alıntı: mesajı görüntüle
    evet aradğım bu kod hocam . peki hocam bu verileri çekerken nasıl ayırt yapacağız ?.
    2 tür veri eçekeceğiz ,
    1- sip_urun_adedi
    2-sip_birim_fiyati
    örnekleyebilirmisiniz rica etsem ?
    sql koduna dikkat ederseniz eğer sip_urun_adedi alanına ait toplam değerini sum_sip_urun_adedi ismiyle tanımlamışız.
    sip_birim_fiyati ise sum_sip_birim_fiyati olarak tanımlanmış.
    Bu isimdeki verileri çağırarak kullanabilirsiniz. Sorgu sonucunu ekrana basarsanız hangi alanda hangi verilerin tutulduğu daha anlaşılır olarak çıkar karşınıza.
  • 20-12-2019, 18:37:32
    #7
    coder63 adlı üyeden alıntı: mesajı görüntüle
    sql koduna dikkat ederseniz eğer sip_urun_adedi alanına ait toplam değerini sum_sip_urun_adedi ismiyle tanımlamışız.
    sip_birim_fiyati ise sum_sip_birim_fiyati olarak tanımlanmış.
    Bu isimdeki verileri çağırarak kullanabilirsiniz. Sorgu sonucunu ekrana basarsanız hangi alanda hangi verilerin tutulduğu daha anlaşılır olarak çıkar karşınıza.
    hocam dediklerinizi aynen yerine getirdim. şu kısımda tıkandım.


    aynı anda birden ,
    $sum_sip_birim_fiyati = $sonuc->fetchColumn();
    $sum_sip_urun_adedi = $sonuc->fetchColumn();

    kullanamıyorum .

    $sonuc = $db->prepare("SELECT sum(sip_urun_adedi) as sum_sip_urun_adedi, sum(sip_birim_fiyati) as sum_sip_birim_fiyati FROM siparis WHERE in_out='Giriş' AND sip_zaman >= NOW() - INTERVAL 1 month
    AND stok_id=:id ");
    
    $sonuc->execute(array('id' => guvenlik($_POST['id']) ));
    $sum_sip_urun_adedi = $sonuc->fetchColumn();
    $sum_sip_birim_fiyati = $sonuc->fetchColumn();
  • 20-12-2019, 19:23:44
    #8
    2 defa kullanmanıza gerek yok zaten.

    $sonuc = $db->prepare("SELECT sum(sip_urun_adedi) as sum_sip_urun_adedi, sum(sip_birim_fiyati) as sum_sip_birim_fiyati FROM siparis WHERE in_out='Giriş' AND sip_zaman >= NOW() - INTERVAL 1 month
    AND stok_id=:id ");
    
    $sonuc->execute(array('id' => guvenlik($_POST['id']) ));
    $result = $sonuc->fetchColumn();
    
    $sum_sip_urun_adedi = $result["sum_sip_urun_adedi"];
    $sum_sip_birim_fiyati = $result["sum_sip_birim_fiyati"];
  • 20-12-2019, 20:10:24
    #9
    coder63 adlı üyeden alıntı: mesajı görüntüle
    2 defa kullanmanıza gerek yok zaten.

    $sonuc = $db->prepare("SELECT sum(sip_urun_adedi) as sum_sip_urun_adedi, sum(sip_birim_fiyati) as sum_sip_birim_fiyati FROM siparis WHERE in_out='Giriş' AND sip_zaman >= NOW() - INTERVAL 1 month
    AND stok_id=:id ");
    
    $sonuc->execute(array('id' => guvenlik($_POST['id']) ));
    $result = $sonuc->fetchColumn();
    
    $sum_sip_urun_adedi = $result["sum_sip_urun_adedi"];
    $sum_sip_birim_fiyati = $result["sum_sip_birim_fiyati"];

    hocam hata alıyorum. hata almama rağmen sonuç veriyor ama yanlış sonuç.
    Warning: Illegal string offset 'sum_sip_urun_adedi' in E:xampphtdocs******-profil.php on line 210
    Warning: Illegal string offset 'sum_sip_birim_fiyati' in E:xampphtdocs******-profil.php on line 211

    hata satırları :
    $sum_sip_urun_adedi = $result["sum_sip_urun_adedi"];
    $sum_sip_birim_fiyati = $result["sum_sip_birim_fiyati"];