v2.5.2
Giriş yap

kategori adı ve ait olduğu banner'lar join ile kayıtlar çift geliyor.

kartal
561 defa görüntülendi

Kategori var ve başka tabloda da kategori id li banner lar var
ben

  1. Kategori 1
    Banner 1 (kategori 1)
    Banner 2 (kategori 1)

  2. Kategori 2
    Banner 1 (kategori2)
    Banner 2 (kategori2)

    Bu şekilde listeletmek istiyorum

    $banner = $db->prepare("SELECT * FROM banner INNER JOIN kategoriler ON kategoriler.kategori_id = banner.kategori_id GROUP BY kategoriler.kategori_ad");
    $banner->execute();
    $banner_r = $banner->fetchAll(PDO::FETCH_OBJ);

    foreach ile birleştiriyorum ama
    yukarıda ki gibi listeletemedim

    Yani yapmak istediğim kategori adı ve sayısı altında da ona ait banner ve resimlerini listeletmek :)

Cevap yaz
Cevaplar (5)
kartal
1381 gün önce

Denemedim ama mantıklı bunu yaparım. Bu arada Uzman cevapta vardınız sanırım hatırladım. Ben CMS sistemi yapmaya çalışıyorum e-ticaret, sizce özel olarak yapmak mantıkı mı böylece daha özgün bir tasarım hayal ediyorum :)

farukdst
1382 gün önce

Tek sorgu kullanarakta şöyle yapılabilir:

<?php

$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
$banner = $db->prepare("
    SELECT * FROM banner 
    INNER JOIN kategoriler ON kategoriler.kategori_id = banner.kategori_id
");
$banner->execute();
$banner_r = $banner->fetchAll(PDO::FETCH_OBJ);

$dizi = [];
foreach( $banner_r as $veriler ):
    $dizi[$veriler->kategori_ad][] = $veriler->banner_ad;
endforeach;

foreach( $dizi as $kategori => $banners ):
    echo "<h4>$kategori</h4>";
    foreach( $banners as $banner ):
        echo '<p style="margin-left:10px">'.$banner.'</p>';
    endforeach;
endforeach;

/*
ÇIKTI:
Kategori 1
    Banner 1
    Banner 2
Kategori 2
    Banner 1
    Banner 2
*/

kartal
1382 gün önce

kategoriler ayrı bir tablo
bannerlar ayrı bir tablo

kartal
1382 gün önce

farukdst-> Çok teşekkür ederim ama ben tek sorguda yapmaya çalışıyorum. Yine de olsun.
Inner join ile biraz araştırma yaparak yapmaya çalıştım olmadı tabloları birleştirebildim.

farukdst
1382 gün önce
<?php
$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');

$veriler = function($id = 0) use($db){
    if( $id == 0 ){
        $kategori = $db->prepare('SELECT * FROM kategoriler');
        $kategori->execute();
        if( $kategori->rowCount() ):
            $kategori_r = $kategori->fetchAll(PDO::FETCH_OBJ);
            return $kategori_r;
        endif;
    }else{
        $banner = $db->prepare('SELECT * FROM banner WHERE kategori_id = :kID');
        $banner->execute([':kID' => $id]);
        if( $banner->rowCount() ):
            $banner_r = $banner->fetchAll(PDO::FETCH_OBJ);
            return $banner_r;
        endif;
    }
    return false;
};

foreach( $veriler(0) as $kategori ):
    echo "<h4>$kategori->kategori_ad</h4>";
    foreach( $veriler($kategori->kategori_id) as $banner ):
        echo "<p style="margin-left:10px">$banner->banner_ad</p>";
    endforeach;
endforeach;

/*
ÇIKTI:
Kategori 1
    Banner 1
    Banner 2
Kategori 2
    Banner 1
    Banner 2
*/