v2.5.2
Giriş yap

PHP ile Birden Fazla Kategori Verisi Çekme

ilkertuncer
275 defa görüntülendi ve 1 kişi tarafından değerlendirildi

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,
https://prnt.sc/YPaZQyy8FN9o
ç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>';
 
}
// 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);
Cevap yaz
Cevaplar (1)
f4kor4ll
395 gün önce

Merhaba,

Kodunuzda öncelikle $categories değişkeninde tüm kategorileri alıyorsunuz. Daha sonra ise `$id değişkeniyle belirtilen bir kategorinin adını ve o kategoriye ait verileri çekiyorsunuz.

İstenilen sonucu elde etmek için ise öncelikle tüm kategorilerin ID'lerini tek bir değişkende toplamanız gerekiyor. Bu işlemi $category_ids adında bir dizi oluşturarak yapabilirsiniz:

$category_ids = array_column($categories, 'id');

Daha sonra, bu ID'leri içeren 5 farklı kategoriye ait verileri çekebilirsiniz. Bunun için, `$category_ids dizisinden her seferinde bir ID seçerek o kategoriye ait verileri çekebilirsiniz. Bu işlemi foreach döngüsü kullanarak yapabilirsiniz:

$limit = 5;
$result = [];

foreach (array_slice($category_ids, 0, $limit) as $id) {
    $sorgu = $db->prepare('SELECT * FROM categories WHERE id = ?');
    $sorgu->execute([$id]);
    $category = $sorgu->fetch(PDO::FETCH_ASSOC);

    if ($category) {
        $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);

        $result[] = [
            'category_name' => $category['name'],
            'dersler' => $dersler
        ];
    }
}

Bu kod bloğu, `$result değişkenine 5 farklı kategoriye ait verileri ekleyecektir. Sonuç olarak, `$result değişkeninde istenilen formatta bir dizi veri olacaktır.

Bu diziyi ekranda göstermek için, örneğin aşağıdaki kodu kullanabilirsiniz:

foreach ($result as $item) {
    echo '<h3>' . $item['category_name'] . '</h3>';
    echo '<ul>';
    foreach ($item['dersler'] as $ders) {
        echo '<li>' . $ders['title'] . '</li>';
    }
    echo '</ul>';
}

Bu kod, öncelikle her kategori için bir başlık (<h3>) oluşturacak ve o kategoriye ait dersleri liste (<ul>) halinde ekrana yazdıracaktır.