id ye göre tablodan veri saydırma
Merhaba iki tablom var biri koleksiyon_tr bunun içinde koleksiyon tanımlayıcı bilgilerini tutuyorum (ID,k_baslik,k_adi, k_id,seflink,tablo).
Diğer tablomda makalelerin olduğu tablo: makale_tr (ID,yazar,baslik,link,koleksiyon_id). Ortak noktaları ise
koleksiyon_tr.k_id = makale_tr.koleksiyon_id
panelimde koleksiyon adlarının listesini çektim ve bu koleksiyon adlarının kaç makalede kullanıldığını saydırmak için fonksiyon yazmaya çalıştım.
Fakat makale_tr tablosu koleksiyon_id sütununa göre saydırtamadım. Toplam makale sayısını veriyor. Kod konusunda yardımcı olur musunuz?
public function sayKoleksiyon($koleksiyon_id){
$sql="SELECT koleksiyon_id FROM makale_tr
inner join koleksiyon_tr
on koleksiyon_tr.k_id = makale_tr.koleksiyon_id";
$calistir=$this->baglanti->prepare($sql);
$calistir->execute(['k_baslik'=>$koleksiyon_id]);
$count = $calistir->rowCount();
return $count;
}
<tr>
<th>#</th>
<th>Koleksiyon Adı</th>
<th>Makale Sayısı</th>
</tr>
</thead>
<tbody>
<?php
$veriler=$VT->VeriGetir("koleksiyon_tr","","","ORDER BY ID ASC");
if($veriler!=false)
{
$sira=0;
for($i=0;$i<count($veriler);$i++)
{
$sira++;
?>
<tr>
<td><?=$sira?></td>
<td><?php
echo stripslashes($veriler[$i]["k_baslik"]);
?>
</td>
<!-- koleksiyon_id ye göre saydırtmam lazım koleksiyon saydırması başarılı değil.-->
<td><span class="badge bg-success"><?=$count->sayKoleksiyon($i)?></span></td>
</tr>
<?php
}
}
?>
</tbody>
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (8)
Fonksiyonun son hali:
public function sayKoleksiyon($koleksiyon_id){
$sql="SELECT COUNT(`makale_tr`.`koleksiyon_id`) AS `adet` FROM `makale_tr`
INNER JOIN `koleksiyon_tr` ON `koleksiyon_tr`.`k_id` = `makale_tr`.`koleksiyon_id`
WHERE `koleksiyon_tr`.`k_id` = :k_baslik";
$calistir=$this->baglanti->prepare($sql);
$calistir->execute([':k_baslik'=>$koleksiyon_id]);
$data = $calistir->fetch(PDO::FETCH_ASSOC);
return $data['adet'];
}
Aşağıdaki şu kısım ne olmalı?
<td><span class="badge bg-success"><?=$count->sayKoleksiyon($i)?></span></td>
Bu haliyle:
@makifgokce hocam, bir terslik var, sıralama kaymış gibi sayıyor.
Öncelikle aşağıdaki kısma anlam veremedim.Sql kodunun içerisinde parametre alacak bir yer yok ama burda parametre göndermişsin.
Sql kodunu aşağıdaki gibi yapıp denermisin.
SELECT COUNT(`makale_tr`.`koleksiyon_id`) AS `adet` FROM `makale_tr` INNER JOIN `koleksiyon_tr` ON `koleksiyon_tr`.`k_id` = `makale_tr`.`koleksiyon_id` WHERE `koleksiyon_tr`.`k_id` = :k_baslik
inner join ile birleştir count() ilede saydır