• 29-08-2024, 00:40:56
    #1
    www.42ajans.com
    Merhaba;

    2 adet tablom var
    1-) haberler tablosu
    2-) haber_kategori tablosu
    Haber girerken kategori kısmında haberin kategorisini seçiyorum. Veri tabanında haberler tablosunda kategori sütununa kategorinin ID'sini atıyor. Aşağıdaki sorguda ben haber_kategori tablosundaki ADI nı ve Link yapısını çektirmek istiyorum.

    Kısaca haberler tablosundaki kategoriler sütunundaki ID değerini haber_kategori tablosundaki ID değeri ile kontrol ettirip ADINI ve LİNK yapısını çektirmek istiyorum.

    Aşağıdaki kod kısımda HABER KATEGORİSİ BURAYA YAZILACAK ve LİNK YAPISI BURAYA YAZILACAK yerlere ne yazmam gerekiyor?

      <?php
        $bcek = $db->query("select * from haberler where dil='{$dilsec["id"]}' order by id desc limit 3")->fetchAll(PDO::FETCH_ASSOC);
        
        foreach($bcek as $bgoster){
            
        ?>
                        <div class="blog-item">
                                <div class="image-wrap">
                                    <a href="#"><img src="resimler/<?=$bgoster["resim"]?>" alt="<?=$bgoster["adi"]?>"></a>
                                    <ul class="post-categories">
                                        <li><a href="LİNK YAPISI BURAYA YAZILACAK ">HABER KATEGORİSİ BURAYA YAZILACAK </a></li>
                                    </ul>
                                </div>
                                <div class="blog-content">
                                   <ul class="blog-meta mb-10">
                                       <li class="admin"> <i class="fa fa-user-o"></i> Admin</li>
                                       <li class="date"> <i class="fa fa-calendar-check-o"></i> <?=$bgoster["eklenme_tarihi"]?></li>
                                   </ul>
                                   <h3 class="blog-title"><a href="<?=$bgoster["seo"]?>"><?=$bgoster["adi"]?></a></h3>
                                   <p><?=$bgoster["onaciklama"]?></p>
                                </div>
                            </div>
                            <?php }?>
  • 29-08-2024, 00:44:36
    #2
    Umarım doğru anlamışımdır hocam, bunu dener misiniz:


    <div class="blog-item">
    <div class="image-wrap">
    <a href="#"><img src="resimler/<?=$bgoster["resim"]?>" alt="<?=$bgoster["adi"]?>"></a>
    <ul class="post-categories">
    <li><a href="<?=$bgoster["kategori_link"]?>"><?=$bgoster["kategori_adi"]?></a></li>
    </ul>
    </div>
    <div class="blog-content">
    <ul class="blog-meta mb-10">
    <li class="admin"><i class="fa fa-user-o"></i> Admin</li>
    <li class="date"><i class="fa fa-calendar-check-o"></i> <?=$bgoster["eklenme_tarihi"]?></li>
    </ul>
    <h3 class="blog-title"><a href="<?=$bgoster["seo"]?>"><?=$bgoster["adi"]?></a></h3>
    <p><?=$bgoster["onaciklama"]?></p>
    </div>
    </div>
  • 29-08-2024, 00:44:46
    #3
    Merhaba! Sizin sorunuz için yardımcı olmaktan memnuniyet duyarım. Tabii ki size bu konuda yardımcı olabilirim. İşte adım adım düşünce sürecim ve önerilerim:

    ### Düşünce Süreci

    1. Sorguda haberler tablosundaki kategoriler sütunundaki ID değerini haber_kategori tablosundaki ID değeri ile kontrol etmemiz gerekiyor.
    2. Eğer ID'ler eşleşirse, haber_kategori tablosundan AD ve LİNK bilgilerini çekeceğiz.
    3. Bu işlemi yaparken, haberler tablosunda boş kategori ID'leri için NULL döndürmek istiyoruz.

    ### Önemli Noktalar

    - JOIN sorgusu kullanacağız çünkü iki tablo arasında ilişki var.
    - ON clause'ı kullanarak tabloları birleştirme koşullunu belirleyeceğiz.
    - WHERE clause'ı kullanarak ID'lerin eşleşmesini kontrol edeceğiz.
    - CASE statement kullanarak farklı durumlar için farklı sonuçlar döndüreceğiz.

    ### Kod İmplementation

    İşte istediğiniz gibi bir SQL sorgusu örneği:

    sql
    SELECT
    H.haber_id,
    H.haber_baslik,
    H.haber_metin,
    H.kategori_id,
    CASE
    WHEN HK.kategori_id IS NOT NULL THEN CONCAT(HK.kategori_ad, ', ', HK.link)
    ELSE NULL
    END AS kategori_info
    FROM
    haberler H
    LEFT JOIN
    haber_kategori HK ON H.kategori_id = HK.kategori_id
    WHERE
    H.kategori_id IS NOT NULL OR HK.kategori_id IS NOT NULL;
    Bu sorguda:

    1. `haberler` tablosu (H) ve `haber_kategori` tablosu (HK) birleştiriliyor.
    2. `ON` clause'ı ile tabloların ID'leri eşleştiğine göre birleştirme yapıyoruz.
    3. `CASE` statement kullanarak, eğer `haber_kategori` tablosunda bir kayıt varsa, kategori adı ve link bilgisi döndürüyoruz.
    4. Eğer `haber_kategori` tablosunda bir kayıt yoksa veya ID'ler eşleşmiyor ise NULL döndürüyoruz.
    5. `WHERE` clause'ı ile sadece kategorili haberleri seçiyoruz.

    ### Özet ve En İyi Uygulamalar

    Bu sorgu, istediğiniz gibi haberler tablosundaki kategoriler sütunundaki ID değerini haber_kategori tablosundaki ID değeri ile kontrol ediyor ve eğer eşleşirse AD ve LİNK bilgilerini çekebiliyor. Ayrıca boş kategori ID'leri için NULL döndürüyor.

    En iyi uygulamalar şunlardır:

    1. Tablo adlarını Türkçe olarak kullanmak yerine İngilizce (örneğin, haberler için "news" yerine "articles") daha anlaşılır hale getiriyor.
    2. JOIN kullanarak veri tabanının ilişkilerini etkili bir şekilde kullanıyor.
    3. CASE statement kullanarak farklı durumlar için farklı sonuçlar döndürüyor.
    4. WHERE clause'ı kullanarak gereksiz işlemleri önleyerek performansını artırıyor.

    Bu sorguyu kullanırken, tabloların exact column names'i ve table names'i size uygun olduğunda güncellemenizi öneririm. Ayrıca, tabloların schema'sı ve veri tipleri size göre ayarlanmalıdır.

    Citations:
    [1] https://stackoverflow.com/questions/...n-column-value
    [2] https://www.interviewquery.com/p/sql-conditional-join
    [3] https://dba.stackexchange.com/questi...-column-select
    [4] https://www.sqlservercentral.com/for...een-two-tables
    [5] https://launchschool.com/books/sql/read/joins
    [6] http://sqlines.com/mysql/how-to/join...d-on-condition
    [7] https://bytes.com/topic/sql-server/8...ased-condition
    [8] https://dev.to/gschro/conditional-co...in-in-sql-5g03
    [9] https://asktom.oracle.com/ords/askto...nditional-join


    Yazılım ile ilgili olarak https://www.phind.com/ yapay zeka aracını kullanabilirsiniz.
  • 29-08-2024, 00:46:30
    #4
    Kurumsal PLUS
    Bu durum için Inner Join kullanmanız gerekiyor.

    SELECT h.*, hk.ADI as kategori_adi, hk.LINK as kategori_link FROM haberler h  INNER JOIN haber_kategori hk ON h.kategori = hk.ID WHERE h.dil='{$dilsec["id"]}'  ORDER BY h.id DESC LIMIT 3
  • 29-08-2024, 10:03:56
    #5
    www.42ajans.com
    bluecrown adlı üyeden alıntı: mesajı görüntüle
    Merhaba! Sizin sorunuz için yardımcı olmaktan memnuniyet duyarım. Tabii ki size bu konuda yardımcı olabilirim. İşte adım adım düşünce sürecim ve önerilerim:

    ### Düşünce Süreci

    1. Sorguda haberler tablosundaki kategoriler sütunundaki ID değerini haber_kategori tablosundaki ID değeri ile kontrol etmemiz gerekiyor.
    2. Eğer ID'ler eşleşirse, haber_kategori tablosundan AD ve LİNK bilgilerini çekeceğiz.
    3. Bu işlemi yaparken, haberler tablosunda boş kategori ID'leri için NULL döndürmek istiyoruz.

    ### Önemli Noktalar

    - JOIN sorgusu kullanacağız çünkü iki tablo arasında ilişki var.
    - ON clause'ı kullanarak tabloları birleştirme koşullunu belirleyeceğiz.
    - WHERE clause'ı kullanarak ID'lerin eşleşmesini kontrol edeceğiz.
    - CASE statement kullanarak farklı durumlar için farklı sonuçlar döndüreceğiz.

    ### Kod İmplementation

    İşte istediğiniz gibi bir SQL sorgusu örneği:

    sql
    SELECT
    H.haber_id,
    H.haber_baslik,
    H.haber_metin,
    H.kategori_id,
    CASE
    WHEN HK.kategori_id IS NOT NULL THEN CONCAT(HK.kategori_ad, ', ', HK.link)
    ELSE NULL
    END AS kategori_info
    FROM
    haberler H
    LEFT JOIN
    haber_kategori HK ON H.kategori_id = HK.kategori_id
    WHERE
    H.kategori_id IS NOT NULL OR HK.kategori_id IS NOT NULL;
    Bu sorguda:

    1. `haberler` tablosu (H) ve `haber_kategori` tablosu (HK) birleştiriliyor.
    2. `ON` clause'ı ile tabloların ID'leri eşleştiğine göre birleştirme yapıyoruz.
    3. `CASE` statement kullanarak, eğer `haber_kategori` tablosunda bir kayıt varsa, kategori adı ve link bilgisi döndürüyoruz.
    4. Eğer `haber_kategori` tablosunda bir kayıt yoksa veya ID'ler eşleşmiyor ise NULL döndürüyoruz.
    5. `WHERE` clause'ı ile sadece kategorili haberleri seçiyoruz.

    ### Özet ve En İyi Uygulamalar

    Bu sorgu, istediğiniz gibi haberler tablosundaki kategoriler sütunundaki ID değerini haber_kategori tablosundaki ID değeri ile kontrol ediyor ve eğer eşleşirse AD ve LİNK bilgilerini çekebiliyor. Ayrıca boş kategori ID'leri için NULL döndürüyor.

    En iyi uygulamalar şunlardır:

    1. Tablo adlarını Türkçe olarak kullanmak yerine İngilizce (örneğin, haberler için "news" yerine "articles") daha anlaşılır hale getiriyor.
    2. JOIN kullanarak veri tabanının ilişkilerini etkili bir şekilde kullanıyor.
    3. CASE statement kullanarak farklı durumlar için farklı sonuçlar döndürüyor.
    4. WHERE clause'ı kullanarak gereksiz işlemleri önleyerek performansını artırıyor.

    Bu sorguyu kullanırken, tabloların exact column names'i ve table names'i size uygun olduğunda güncellemenizi öneririm. Ayrıca, tabloların schema'sı ve veri tipleri size göre ayarlanmalıdır.

    Citations:
    [1] https://stackoverflow.com/questions/...n-column-value
    [2] https://www.interviewquery.com/p/sql-conditional-join
    [3] https://dba.stackexchange.com/questi...-column-select
    [4] https://www.sqlservercentral.com/for...een-two-tables
    [5] https://launchschool.com/books/sql/read/joins
    [6] http://sqlines.com/mysql/how-to/join...d-on-condition
    [7] https://bytes.com/topic/sql-server/8...ased-condition
    [8] https://dev.to/gschro/conditional-co...in-in-sql-5g03
    [9] https://asktom.oracle.com/ords/askto...nditional-join


    Yazılım ile ilgili olarak https://www.phind.com/ yapay zeka aracını kullanabilirsiniz.
    Detaylı açıklamanız için çok teşekkür ederim.

    webcolic adlı üyeden alıntı: mesajı görüntüle
    Bu durum için Inner Join kullanmanız gerekiyor.

    SELECT h.*, hk.ADI as kategori_adi, hk.LINK as kategori_link FROM haberler h  INNER JOIN haber_kategori hk ON h.kategori = hk.ID WHERE h.dil='{$dilsec["id"]}'  ORDER BY h.id DESC LIMIT 3
    Çok teşekkür ederim hocam çalıştı kodunuz eksiğimi sayende öğrenmiş oldum. Ancak üstteki yorum daki LEFT JOIN ile sizin kullandığınız INNER JOIN kafamı karıştırdı bunları bir araştırayım