v2.5.2
Giriş yap

PHP'de tek bir sorgu ile veriye ait bütün her şeyi çekme

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

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.

rephp7
917 gün önce

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);