v2.5.2
Giriş yap

PHP inner join hakkında

hakan16
765 defa görüntülendi

Merhaba 3 adet tablom var hesaplar, gelir ve gider. Örnek olarak kullanıcı id'si 1 olanların hangi hesaplarının olduğunu ve o hesaplara ait gelir ve gider tablosundaki verilerini göstermek istiyorum. Hesaplar tablosunda o kullanıcıya ait hesaplar var yani toplam_para=sum(gelir)-sum(gider) yapmak istiyorum.

<?php
    <?php 
           
                $gelir=$db->prepare("select hesap_id, hesap_adi, toplam_para, gelir_tutari, gider_tutari from  hesaplar inner join gelir on hesaplar.kullanici_id=gelir.kullanici_id 
                                                             inner join gider on hesaplar.kullanici_id=gider.kullanici_id where hesaplar.kullanici_id=$id  GROUP BY hesaplar.hesap_adi
                                                                                                                                                                  ");
                    $gelir->execute();
                    $gelecek=$gelir->fetchAll();
                    print_r($gelecek);
                    foreach($gelecek as $hesaps){  ?>
                     
                        <li class="hesap_listesi_hesaplar_hesap">
              <a href="gecmis.php">
                <span class="hesap_title"><?php echo ucfirst_tr($hesaps['hesap_adi']); ?></span>
                <span class="hesap_bakiye"><?php echo number_format($hesaps['toplam_para'], 0, ",",".")." ₺";?></span>
              </a>
             </li>
                    <?php }  ?>
?>
Cevap yaz
Cevaplar (8)
hakan16
1384 gün önce

Sizin yaptığınız mantıkta da denedim fakat yapmak istediğim şey yine olmuyor.
Yorumlarınız için teşekkür ederim :)

onlywhatchess
1384 gün önce

Bu faso fiso çıktı herhalde
"Bildiğim kadarıyla birleştirdiğin anahtarı sorgularında kullanamıyorsun." :)

aydinkeskin
1384 gün önce
$sql = "SELECT 
          a.adi as AAdi,
          a.id as AID,
          a.istediğin veriler,
          b.istediğin veriler,
          c.istediğin veriler
        FROM 
          a
        INNER JOIN b ON a.id = b.id
        INNER JOIN c ON a.id = c.id
        WHERE a.id =?";
    $sql->execute([$gelenAIDDEĞERİ]);
    $row = $sql->fetch(2); // 2 PDO::FETCH_ASSOC demek oluyor
    
    // a.id değeri ile eşleşen b.id ve c.id tablolarından SELECT den sonra yazdığın her veriyi çekebilirsin
    
          



söyle bakalım senin siparisler tablon var orda userID urunID tutuyorsun

siparislere gelen userID ve urunlere giden urunID sütünlarını users tablon var diyelim

users.id = siparisler.userID
urun.id = siparisler.urunID

şeklinde karşılaştırıp oan denk gelen bütün ve tek olarak siparişi çekebilirsin

onlywhatchess
1384 gün önce

SQL
Attığım sql'i indir,
Yeni bir veritabanı oluşutur,
Oluşan veritabanına tıkla,
İçeri aktar'a tıkla,
Dosya seç'e tıkla,
Aşağıdaki git'e tıkla

Aşağıdaki sorguyu çalıştırırsan


    SELECT u.u_id, u.ad 'Müşteri Adı', ie.miktar 'İşlem Tutarı', ie.tarih 'İşlem Tarihi', a.ad 'Banka Adı' FROM `users` u JOIN income_expense ie ON u.u_id = ie.u_id JOIN accounts a ON a.a_id = ie.a_id WHERE u.u_id = 1

Çıktısı:

Sorgusuz çalışan hali:


Biraz kayıt eklersen üzerinde her türlü işlemi yapabilirsin, umarım doğru anlamışımdır.

hakan16
1385 gün önce

hesaplar tablom : https://prnt.sc/yqeq8p
gelir tablom : https://prnt.sc/yqet6h
gider tablom : https://prnt.sc/yqeud4

Yani kullanıcı_id=$id olanların hesaplarını listeleticem fakat listelerken şu işlemleri de yapmak istiyorum,
gelir tablosundaki o kullanıcıya ait her hesabın gelirini hesaplardaki toplama ekleyeceğim aynı şekilde giderde öyle.
Umarım yapmak istediğimi anlatabilmişimdir çünkü çok bilgili değilim.

onlywhatchess
1385 gün önce

Evet birleştirmemelisiniz, birleştiriyorsanız dahi onlarla ilgili sorgu yazamazsınız. Tablo yapını gösterebilirsen daha çok yardımcı olabilirim.

hakan16
1385 gün önce

Söylemek istediğiniz tabloları birleştirirken kullanıcı id lerini birleştirmemeli miyim?

onlywhatchess
1385 gün önce

Selamlar Hocam,
Bildiğim kadarıyla birleştirdiğin anahtarı sorgularında kullanamıyorsun.
Senin sorgundaki kullanici_id gibi örnek olarak


SELECT * FROM 
gelir gl JOIN gider gd 
ON gl.kullanici_id = gd.kullanici_id // Birleştirilen anahtarlar
WHERE gl.kullanici_id = 3 veya gd.kullanici_id = 3 veya kullanici_id = 3

bu şekilde dahi kullanımı mevcut değil. Demem o ki veritabanını yeniden düzenlemen gerekicek.

Dediklerime ek olarak, uzun olan tablo isimlerini


SELECT * FROM tablo_adi AS ta WHERE ta.sutun_adi = 'deger';
/*--------- veya ------*/
SELECT * FROM tablo_adi ta WHERE ta.sutun_adi = 'deger';

şeklinde kısaltıpta kullanabilirsin.