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)
foreach($veriler AS $sira => $veri)
{
?>
<tr>
<td><?=$sira + 1?></td>
<td><?php
echo stripslashes($veri["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($veri['k_id'])?></span></td>
</tr>
<?php
}
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.
$calistir->execute(['k_baslik'=>$koleksiyon_id]);
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
$calistir->execute([':k_baslik'=>$koleksiyon_id]);
$data = $calistir->fetch(PDO::FETCH_ASSOC);
return $data['adet'];
inner join ile birleştir count() ilede saydır