• 26-11-2022, 12:12:10
    #1
    Merhabalar. Elimde $id değişkenindeki tek bir id ye bakarak o kategorinin adını ve eklenmiş verilerini çeken bir kodum var.
    İstiyorum ki kategoriler tablosundaki bütün id leri tek bir değişkene çekip, limit 5 diyip 5 tane farklı kategoriyi ve ona eklenmiş olan konularını şu şekilde,


    çeksin. Ne yapmalıyım?

    Kodum:
    $categories = $db->query('SELECT * FROM categories ORDER BY id DESC')->fetchAll(PDO::FETCH_ASSOC);
    
    $id=6;
    
    
    $sorgu = $db->prepare('SELECT * FROM categories
    WHERE id = ?');
    $sorgu->execute([
        $id
    ]);
    $category = $sorgu->fetch(PDO::FETCH_ASSOC);
    
    if (!$category) {
        echo ' <script type="text/javascript">
          swal("", "Kategori Bulunamıyor!. Hata Kodu: B004&?4982", "error")
        </script>';
    
    }
    
    // print_r($category);
    
    // category'e ait verileri çekme
    $sorgu = $db->prepare('SELECT * FROM posts
    WHERE FIND_IN_SET(?, category_id)
    ORDER BY id DESC');
    $sorgu->execute([
        $category['id']
    ]);
    $dersler = $sorgu->fetchAll(PDO::FETCH_ASSOC);
  • 26-11-2022, 12:15:27
    #2
    $sorgu = $db->prepare('SELECT * FROM categories
    WHERE id = ?');
    $sorgu->execute([
    $id
    ]);

    yerine

    $sorgu = $db->prepare('SELECT * FROM categories
    WHERE id in ?');
    $sorgu->execute([
    "1,2,3,4,5"
    ]);

    idleri virgul ile ayirarak eklenmeli.
    https://www.w3schools.com/sql/sql_ref_in.asp
  • 26-11-2022, 12:19:51
    #3
    // category'e ait verileri çekme
    $sorgu = $db->prepare('SELECT * FROM posts ORDER BY id DESC');
    $sorgu->execute(array());
    $dersler = $sorgu->fetchAll(PDO::FETCH_ASSOC);
    Bu şekilde eski yerini güncelle hocam.
  • 26-11-2022, 12:21:34
    #4
    DarkBy adlı üyeden alıntı: mesajı görüntüle
    // category'e ait verileri çekme
    $sorgu = $db->prepare('SELECT * FROM posts ORDER BY id DESC');
    $sorgu->execute(array());
    $dersler = $sorgu->fetchAll(PDO::FETCH_ASSOC);
    Bu şekilde eski yerini güncelle hocam.
    Hocam merhabalar. Şu an kategori adı yazdırmıyor
    Notice: Trying to access array offset on value of type bool in C:xampphtdocsdenemeeindex.php on line 34
    diyor. nedendir?
  • 26-11-2022, 12:22:51
    #5
    crooper adlı üyeden alıntı: mesajı görüntüle
    $sorgu = $db->prepare('SELECT * FROM categories
    WHERE id = ?');
    $sorgu->execute([
    $id
    ]);

    yerine

    $sorgu = $db->prepare('SELECT * FROM categories
    WHERE id in ?');
    $sorgu->execute([
    "1,2,3,4,5"
    ]);

    idleri virgul ile ayirarak eklenmeli.
    https://www.w3schools.com/sql/sql_ref_in.asp
    Hocam peki kategoriler tablosundaki tüm kategori idleri bir değişkene atayım o değişkeni
    $sorgu = $db->prepare('SELECT * FROM categories
    WHERE id in ?');
    $sorgu->execute([
    "1,2,3,4,5"
    ]);
    12345 yerine yazabilir miyim?
  • 26-11-2022, 12:35:41
    #6
    Join kullanımına bakin
  • 26-11-2022, 13:50:12
    #7
    EvrenOnur adlı üyeden alıntı: mesajı görüntüle
    Join kullanımına bakin
    Hocam konuyu güncelledim. Bir daha bakabilir misiniz?
  • 26-11-2022, 14:31:50
    #8
    Alıntı
    Hocam peki kategoriler tablosundaki tüm kategori idleri bir değişkene atayım o değişkeni
    Bunu yapmakla hic yapmamak ayni sey, hic yazmazsanizda butun kategoriler gelecek zaten.

    yukardaki aldiginiz hatayi anladiniz mi ? demekki yanlis bir tip veriyoruz. benim yazdigim kodda hatali olabilir. Ama kullanacaginiz keyword in. yani where id = 5 degilde where id in (1,2,3,4,5) seklinde db uzerinde sql sorgusu calistirmaniz gerekiyor.
    1,2,3,4,5 in yerine degisken mi koyarsiniz, ustte bir sorgu daha cagirip idleri mi alirsiniz sizin yaraticiliginiza kalmis. PHP ogrenmek istiyorsaniz bunu kendiniz cozun derim.
    Duz mantik sudur :
    • db den kategorileri cek
    • for dongusu ile bu cekilen kategorileri döndür
    • döngü icerisinde her bır kategori id için db den konuları çek.
    • ikinci bir dongu ile cekilen konulari ekrana yazdir
    • Ekrana yazdır.
    bu sekılde su cıktı alinabilir:
    kategori 1
    • konu1
    • konu2
    kategori2
    • konu3
    • konu4 ..
    pseudo code:
    for each kategori in kategoriler(id in 1,2,3,4)
    echo "kategori adi:" . kategori->kategoriAdi
    for each konu in konular(where kategori id = kategori->id)
    echo konu->baslik

    biraz daha performansli, optimal kod yazmak icin keywords: sql join, sql sub query, ayrica print_r ile ekrana yazdirmaya bir goz atin.