Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

tüm başlıkları ve başlıklara ait yorum sayısını alma

merhaba arkadaşlar,
php html kodlarını yeni yeni ayrıştırarak yazmaya başladım. fakat ilişkili sorgularda sıkıntı yaşıyorum. şimdi istediğim tüm yazı başlıklarını ve bu yazılara eklenen yorum sayısını almak.

yazı tablom şu şekilde
id | uyeid | baslik | icerik | tarih


yorum tablom ise şöyle
id | uyeid | yaziid | yorum | tarih

bu istediğim verileri php/yazi.php içerisinde alıp html/yazi.php içerisinde yazdırmam gerekli. tahmin edeceğiniz üzere yazı başlıklarını alabiliyorum ama ilgili yazı başlığına ait yorum sayısını nasıl çekeceğimi bilmiyorum. eskiden yorum sayısını html/yazi.php icerisinde yazı başlıklarını çektiğim döngü içinde yeni bir sorgulama ile yapıyordum fakat bunu başlıkları çektiğim php/yazi.php sayfasında nasıl halledeceğimi bilmiyorum.

umarım anlatabilmişimdir.
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • xuma adlı üyenin fotoğrafı
    10 yıl önce yazılmış
    171 cevap - 1 soru
    SELECT yazi.id, yazi.baslik, COUNT(yorum.id) AS yorum_sayisi
    FROM yazi
    LEFT JOIN yorum
        ON yazi.id = yorum.yaziid
    GROUP BY yazi.id, yazi.baslik
    
    • bensedat18 adlı üyenin fotoğrafı bensedat18
      hocam peki join kullanmayıp farklı sorgular ile yapmak istersek nasıl olacak? join daha mantıklı tabi fakat diğer yolu da bilirsem iyi olur.
      10 yıl önce yazılmış
    • xuma adlı üyenin fotoğrafı xuma
      Kısaca yazıyorum umarım anlaşılır olur mantık bu şekildedir.

      $sorgu =$db->query("SELECT * FROM yazi")->fetchALL(PDO::FETCH_OBJ);
      foreach($sorgu as $s){
          $yeni=$db->query("select count(id) as sayi from yorum where yaziid='".$s->id."'")->fetchALL(PDO::FETCH_OBJ);
          echo "$s->baslik yazisinda $yeni->sayi kadar yorum var";
      }
      




      veya

      $sorgu =$db->query("SELECT * FROM yazi")->fetchALL(PDO::FETCH_OBJ); 
      foreach($sorgu as $s){ 
      	$yeni=$db->query("select * from yorum where yaziid='".$s->id."'")->fetchALL(PDO::FETCH_OBJ); 
      	echo "$s->baslik yazisinda ".count($yeni)." kadar yorum var"; 
      }
      

      Sqlle pek ilgilenmiyorsan bu üstteki daha kolay olan.
      10 yıl önce yazılmış
    • xuma adlı üyenin fotoğrafı xuma
      $link = mysql_connect('localhost', 'root', '');
      	$db = mysql_select_db('veritabanim', $link);
      	$sorgu=mysql_query("select * from yazi");
      	while ($row = mysql_fetch_assoc($sorgu)) 
      	{
      		$yorum=mysql_query("select * from yorum where yaziid='".$row['id']."'");
      		$yorum_sayisi=mysql_num_rows($yorum);
      		echo $row['baslik']." adlı makaleye ".$yorum_sayisi."  yorum eklendi <br>";
      	}
      
      10 yıl önce yazılmış
    • bensedat18 adlı üyenin fotoğrafı bensedat18
      sizin verdiğiniz şekilde echo ile yazdırılabilir fakat bu çektiğim verileri ben bir dizi haline dönüştürmek ve bu diziden gerektiğinde veriyi cekmek istiyorum.

      ben şimdi biraz uğraşınca şu şekilde yaptım fakat doğru kullanım bu mudur bilmiyorum? daha iyi bir yöntem varsa belirtirseniz çok sevinirim.


      function yazilar(){
          $sorgu = mysql_query('SELECT * FROM yazi');
          if( mysql_num_rows($sorgu) > 0 ){
      	while( $row = mysql_fetch_array($sorgu) ){
             	    $data['yazi'][] = $row;
                  $data['yorum_sayisi'][$row['id']] = yorum_sayisi($row['id']);
      	}
          }else{
      	$data['hata'] = 'hata var.';
          }
          return $data;
      }
      
      function yorum_sayisi($yazi_id){
          $sorgu = mysql_query('SELECT COUNT(id) FROM yorum WHERE yazi_id = "' . $yazi_id . '"');
          $sorgu = mysql_fetch_array($sorgu);
          return $sorgu['0'];
      }
      
      10 yıl önce yazılmış
    • xuma adlı üyenin fotoğrafı xuma
      Yaptığında bir sıkıntı yok ama değişik yöntem istersen onlarca çıkar.Bana sorarsan en güzeli ve doğrusu php PDO geç ve en üstte verdiğim sorguyu kullan :) en azından sorguyu kullan çünkü 2 sorguya hiç gerek yok.Seninkine benzer bir mantıkla;

      function yazilar(){
      		$sorgu=mysql_query("SELECT yazi.id, yazi.baslik, COUNT(yorum.id) AS yorum_sayisi
      		FROM yazi
      		LEFT JOIN yorum
      			ON yazi.id = yorum.yaziid
      		GROUP BY yazi.id, yazi.baslik");
      		$row = mysql_fetch_assoc($sorgu);
      		return $row;
      	}
      

      html içinde minmalde olsa php yer alacaktır.
      <? foreach(yazilar() as $yazi):?>
      	<h1><?=$yazi['baslik']?></h1>
      	<small><?=$yazi['yorum_sayisi']</small>
      	<? endforeach;?>
      
      10 yıl önce yazılmış
    • bensedat18 adlı üyenin fotoğrafı bensedat18
      elbette join varken ikinci bir sorgu yapmak hiç akıl kârı değil. yinede gerekli olabilir mi diye biraz kurcalamak istedim. zararı olmaz :). teşekkür ederim ilginiz için.
      10 yıl önce yazılmış

Cevaplar

Hiç cevap bulunamadı.