kategori adı ve ait olduğu banner'lar join ile kayıtlar çift geliyor.
Kategori var ve başka tabloda da kategori id li banner lar var
ben
Kategori 1
Banner 1 (kategori 1)
Banner 2 (kategori 1)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 listeletemedimYani yapmak istediğim kategori adı ve sayısı altında da ona ait banner ve resimlerini listeletmek :)
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (5)
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
*/
<?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
*/