• 25-01-2020, 15:32:01
    #1
    Merhaba kendi işlerimi görebileceğim bir script yapmaya çalışıyorum. Bir yerde takıldım. hesaplar ve kisiler diye 2 tablom var. tablo yapısı kısaca şu şekilde.
    kisiler tablosu: kisi_id | kisi_adsoyad | kisi_tc | kisi_telefon vs.
    hesaplar tablosu: hesap_id | hesap_alanid | hesap_verenid | hesap_alistarih | hesap_veristarih | hesap_miktar vs.

    Hesapları datatable ile listelediğimde hesap_alanid, hesap_verenid diye alan ve veren kişinin id lerini sorunsuz listeliyorum fakat ben burada id yerine isminin yazmasını istiyorum. alan kişi veren kişi ikisi de mysql da kisiler tablosunda. Çünkü bazı kişiler hem alıyor hem veriyor o yüzden ayrı ayrı üyelik oluşturmadan kişilerden bilgilerini güncelliyorum. PHP datatable kodlarım aşağıdadır.
    <div class="table-responsive">
    <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
    <thead>
    <tr>
    <th>Hesap No</th>
    <th>Alan</th>
    <th>Veren</th>
    <th>Alış Tarihi</th>
    <th>Veriş Tarihi</th>
    <th>Miktar</th>
    </tr>
    </thead>
    <tbody>
    <?php
    $hesapsor=$db->prepare("SELECT * FROM kisiler,hesaplar WHERE hesap_alanid=kisi_id ORDER BY hesap_id DESC");
    $hesapsor->execute();
    while ($row=$hesapsor->fetch(PDO::FETCH_ASSOC)) { ?>
    <tr>
    <td><?php echo $row['hesap_id']; ?></td>
    <td><?php echo $row['kisi_adsoyad']; ?></td>
    <td><?php echo $row['hesap_verenid']; ?></td>
    <td><?php echo $row['hesap_alistarih']; ?></td>
    <td><?php echo $row['hesap_veristarih']; ?></td>
    <td><?php echo $row['hesap_miktar']; ?></td>
    </tr>
    <?php } ?>
    </tbody>
    </table>
    </div>
    Bu kodla alan kişinin adsoyadını sorunsuz çekebiliyorum. Veren kişinin id si doğru olarak yazıyor fakat ne yaptıysam veren kişinin adını çekemedim. SELECT CASE WHEN ile de birşeyler denedim ama istediğim sonucu elde edemedim. İstediğim tablo kısaca şu şekilde olacak örneğin.

    Kisi_id | kisi_adsoyad | .....
    1 | Mehmet Türk
    2 | Ahmet Yıldız
    3 | Hasan Toprak

    Hesap ID | Veren Kişi | Alan Kişi | .....
    1 | Ahmet Yıldız | Hasan Toprak
    2 | Hasan Toprak | Mehmet Türk
    3 | Hasan Toprak | Ahmet Yıldız
    4 | Ahmet Yıldız | Mehmet Türk
    5 | Ahmet Yıldız | Mehmet Türk
  • 25-01-2020, 15:51:13
    #2
    inner join ile iki tabloyada bağlanabilirsiniz.
  • 25-01-2020, 17:43:41
    #3
    carasar adlı üyeden alıntı: mesajı görüntüle
    inner join ile iki tabloyada bağlanabilirsiniz.
    @carasar; dediğinizi araştırdım ama ben INNER KOIN ile de yapamadım. Daha doğrusu benim yaptığım yoldan pek bir farklı yok yine alan kişi ve veren kişi olarak değişen atayamadım.
    $hesapsor=$db->prepare("SELECT * FROM hesaplar INNER JOIN kisiler ON hesap_alanid=kisi_id ORDER BY hesap_id DESC");
    Bu şekilde yaptım yine alan kişinin adını yazıyor ama veren kişinin adına bir değişken atayamıyorum. hesap_alanid yerine hesap_verenid diyince bu sefer de veren kişinin adını yazdırıyorum. Ama ikisini aynı anda yazdıramıyorum. Sorunumu anlatabildim mi bilmiyorum kaç gündür bir çözüm bulamadım.
  • 25-01-2020, 18:00:47
    #4
    İkisi içinde bağlanın kişiler tablosuna;
    $hesapsor=$db->prepare("SELECT * FROM hesaplar INNER JOIN kisiler ON hesap_alanid=kisi_id INNER JOIN kisiler ON hesap_verenid=kisi_id ORDER BY hesap_id DESC");
  • 25-01-2020, 18:15:54
    #5
    carasar adlı üyeden alıntı: mesajı görüntüle
    İkisi içinde bağlanın kişiler tablosuna;
    $hesapsor=$db->prepare("SELECT * FROM hesaplar INNER JOIN kisiler ON hesap_alanid=kisi_id INNER JOIN kisiler ON hesap_verenid=kisi_id ORDER BY hesap_id DESC");
    Dediğiniz gibi yapınca tabloda hiç veri listelemedi. Söylediğinize göre çalıştırığım kod aşağıda. Ben mi yanlış anladım veya yapamadım anlamadım.
    <div class="table-responsive">
    <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
    <thead>
    <tr>
    <th>Hesap No</th>
    <th>Alan</th>
    <th>Veren</th>
    <th>Alış Tarihi</th>
    <th>Veriş Tarihi</th>
    <th>Miktar</th>
    </tr>
    </thead>
    <tbody>
    <?php
    $hesapsor=$db->prepare("SELECT * FROM hesaplar INNER JOIN kisiler ON hesap_alanid=kisi_id INNER JOIN kisiler ON hesap_verenid=kisi_id ORDER BY hesap_id DESC");
    $hesapsor->execute();
    while ($row=$hesapsor->fetch(PDO::FETCH_ASSOC)) { ?>
    <tr>
    <td><?php echo $row['hesap_id']; ?></td>
    <td><?php echo $row['kisi_adsoyad']; ?></td>
    <td><?php echo $row['hesap_verenid']; ?></td>
    <td><?php echo $row['hesap_alistarih']; ?></td>
    <td><?php echo $row['hesap_veristarih']; ?></td>
    <td><?php echo $row['hesap_miktar']; ?></td>
    </tr>
    <?php } ?>
    </tbody>
    </table>
    </div>
    Bir de öyle olunca tablodaki
    <td><?php echo $row['kisi_adsoyad']; ?></td>
    <td><?php echo $row['hesap_verenid']; ?></td>
    bu değişkenler nasıl olacak? İkisi de $row['kisi_adsoyad'] olmaz sanırım.
  • 25-01-2020, 18:32:55
    #6
    Merhaba;

    aynı tablodan iki farklı veri çekebilmek için tabloyu sanal olarak oluşturmak lazım yani sorgunuzu aşağıdaki gibi düzenlerseniz sıkıntı olmadan kullanabilirsiniz.

    SELECT AlanKisi.kisi_adi as 'Hesap Alan Kişi', VerenKisi.kisi_adi as 'Hesap Veren Kişi' FROM hesaplar INNER JOIN kisiler as AlanKisi ON AlanKisi.hesap_alanid=kisi_id INNER JOIN kisiler as VerenKisi ON VerenKisi.hesap_verenid=kisi_id ORDER BY hesap_id DESC
    Kodunuzu yukarıda ki gibi düzenlersenizhiç bir sıkıntı olmadan hem alan kişinin hemde veren kişinin isim bilgilerini alabilirsiniz.

    Ek olarak size tavsiyem,
    select * from hesaplar şeklinde sorgu yapmak yerine
    select alanadi1, alanadi2, alanadi3 from hesaplar şeklinde sadece ihtiyacınız olan alanları sql den getirmenizdir. Böylelikle gereksiz alanlar gelmeyecek ve sistem boş yere kasılmayacaktır. (Bu ilk etapta çok bir etkisi olmayacaktır ancak ileriyi düşünerek tabloda ki veri miktarının artışına bağlı olarak bu tip yavaşlamalar yaşanması olasıdır bu yüzden el alışkanlığı edinmenizi ve tablodan sadece ihtiyacız olan alanları sorguya eklemeniz daha olumlu olacaktır.)
  • 26-01-2020, 08:45:12
    #7
    @emiru9396; çok teşekkür ederim. Günlerdir uğraşıyordum verdiğiniz kodlar sayesinde oldu sonunda. Dediğinizi de dikkate alacağım ve gerekli bilgileri çekeceğim sadece. Öneriniz için de teşekkürler