PHP'de tek bir sorgu ile veriye ait bütün her şeyi çekme
Merhabalar.
Amamcım şu. Elimde iki tablom var.
Bu tabloarın ilki 'posts' tablosu. Bu tabloda verilerimi tutuyorum. Tablom: https://prnt.sc/NvPTlgaSEL20
Diğer tablom ise 'categories' bu tablomda ise kategorilerimi tutuyorum. Tablom: https://prnt.sc/VKUO1_V2kN3N
Verimi çekerken diğeceğim ki;
Getten gelecek verim ile alakalı her şeyi veeklenmiş kategori adını (başka tablodaki) getir.
İki farklı sorgu ile çekersem, yani kategorisini şu şekilde;
<?php $categories = $db->query('SELECT categories.*, COUNT(posts.id) as toplamCategory FROM categories
LEFT JOIN posts ON FIND_IN_SET(categories.id, posts.category_id)
GROUP BY categories.id DESC')->fetchAll(PDO::FETCH_ASSOC); ?>
Verimi tuttuğum tabloadan veri bilgimi şu şekilde;
<?php
if (!isset($_GET['url']) || empty($_GET['url'])){
header('Location:404.php');
}
$datas = $db->prepare('SELECT * FROM posts WHERE url = ?');
$datas->execute([
$_GET['url']
]);
$data = $datas->fetch(PDO::FETCH_ASSOC);
if (!$data){
header('Location:404.php');
exit;
}
?>
( $data[''] olarak) 2 farklı forach ile çekersem aynı veriyi kaç tane kategori sayısı varsa o kadar çekiyor ve her farklı çektiğinde de kategoiri ismini diğer kategori adlıryla değiştiriyor
Yardımcı olabilirseniz sevinirim.
COUNT(posts.id)
yapma inner joinle tabloları bağla
sonra kategori id ni get ile aldığından where kısmında kategori id lerini
$kat_id= $datas[0]["id"]
buna bağlı eşitle. böylece iki tablodan sadece post ta tuttugun kategori no ile get ile gelen kategorisi eşit olanları eşleyip sadece onu çekersin.
umarım kısıtlı bilgimle yardımcı olabilmişimdir.
$categories = $db->query('SELECT posts INNER JOIN categories
WHERE categories.id = $kat_id)
ORDER BY posts.id DESC')->fetchAll(PDO::FETCH_ASSOC);