PHP ile Birden Fazla Kategori Verisi Çekme
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);
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (1)
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.