• 07-10-2016, 21:32:48
    #1
    merhabalar;

    hazırlamaya çalıştığım script'in hkat ve haber tablosu var yapmak istediğim haberler sayfasında her kategoriden 10'ar tane haber çekmek pdo ile:

    $query = $db->prepare("SELECT * FROM hkat");
    $query->execute();
     
    if ( $query->rowCount() ){
     
         foreach( $query as $kat ){
     
              echo $kat['id']." = ".$kat['baslik']."<br>";
    
     
         }
    }
    yukarıda ki kod ile kategorileri çekiyorum ama çektiğim kategorilerin id sine göre haberleri çekme kısmında takılıyorum acaba çektiğim id leri dize oluşturup bu dizeye aktarıp kullanmam mı lazım çözemedim tam olarak bir türlü. Pdo da çektiğim verileri dizeye nasıl aktarırım bunu da tam olarak çözemedim gerçi.
  • 08-10-2016, 02:06:55
    #2
    Üyeliği durduruldu
    Döngü içinde bir döngü daha kullanıp yeni döngünün içinde haber tablosu için sorgu yazmanız gerekiyor.

    <?php
    $query = $db->prepare("SELECT * FROM hkat");
    $query->execute();
    
    if($query->rowCount() > 0){
    	while($row=$query->fetch(PDO::FETCH_ASSOC)){
    		$query_haber = $db->prepare("SELECT * FROM haber WHERE hkat_id = ? LIMIT 10");
    		$query_haber->execute(array($row['id']));
    		if($query_haber->rowCount() > 0){
    			while($row_haber = $query_haber->fetch(PDO::FETCH_ASSOC)){
    				echo $row_haber['haber_baslik'];
    			}
    		}
    	}
    }
    Başlangıç için şöyle bir şey iş görür sanırım. İleri seviyede, join yöntemiyle tek sorguyla ve tek döngü ile halledebilirsiniz.
  • 08-10-2016, 21:03:26
    #3
    Vinsanity adlı üyeden alıntı: mesajı görüntüle
    Döngü içinde bir döngü daha kullanıp yeni döngünün içinde haber tablosu için sorgu yazmanız gerekiyor.

    <?php
    $query = $db->prepare("SELECT * FROM hkat");
    $query->execute();
    
    if($query->rowCount() > 0){
    	while($row=$query->fetch(PDO::FETCH_ASSOC)){
    		$query_haber = $db->prepare("SELECT * FROM haber WHERE hkat_id = ? LIMIT 10");
    		$query_haber->execute(array($row['id']));
    		if($query_haber->rowCount() > 0){
    			while($row_haber = $query_haber->fetch(PDO::FETCH_ASSOC)){
    				echo $row_haber['haber_baslik'];
    			}
    		}
    	}
    }
    Başlangıç için şöyle bir şey iş görür sanırım. İleri seviyede, join yöntemiyle tek sorguyla ve tek döngü ile halledebilirsiniz.
    kardeş bu verdiğin kodlar çalışmadı hiç bir hata mesajıda ekrana bastırmadı benim haberler tablosunda kadegori sutununun adı kat WHERE hkat_id = ? bu kısmı kat olarak değiştirince yani WHERE kat = ? haline getirince :
    Notice: Undefined index: haber_baslik in D:\local\htdocs\mersinili\test.php on line 26

    Notice: Undefined index: haber_baslik in D:\local\htdocs\mersinili\test.php on line 26

    Notice: Undefined index: haber_baslik in D:\local\htdocs\mersinili\test.php on line 26

    Notice: Undefined index: haber_baslik in D:\local\htdocs\mersinili\test.php on line 26

    Notice: Undefined index: haber_baslik in D:\local\htdocs\mersinili\test.php on line 26

    Notice: Undefined index: haber_baslik in D:\local\htdocs\mersinili\test.php on line 26

    Notice: Undefined index: haber_baslik in D:\local\htdocs\mersinili\test.php on line 26
    şeklinde hata verdi peki bu pdo ile $kategori dizesi oluşturup hkat tablosundaki verileri nasıl aktarabilirim?
  • 08-10-2016, 21:09:40
    #4
    Döngünün içinde:

    <?php
    $array_haberler = $db->query("SELECT * FROM haber WHERE kategori_id = '".$kat["id"]."' ORDER BY id DESC LIMIT 10")->fetchAll(PDO::FETCH_ASSOC);
    ?>
    Bundan sonrasını halledersin zaten.
  • 08-10-2016, 23:01:24
    #5
    Üyeliği durduruldu
    echo $row_haber['haber_baslik'];
    Bu satırda haber başlığının bulunduğu sütunun ismini yazmanız lazım. Ben örnek olması amaçlı yazmıştım.
  • 09-10-2016, 22:40:55
    #6
    VeLi33 adlı üyeden alıntı: mesajı görüntüle
    merhabalar;

    hazırlamaya çalıştığım script'in hkat ve haber tablosu var yapmak istediğim haberler sayfasında her kategoriden 10'ar tane haber çekmek pdo ile:

    $query = $db->prepare("SELECT * FROM hkat");
    $query->execute();
     
    if ( $query->rowCount() ){
     
         foreach( $query as $kat ){
     
              echo $kat['id']." = ".$kat['baslik']."<br>";
    
     
         }
    }
    yukarıda ki kod ile kategorileri çekiyorum ama çektiğim kategorilerin id sine göre haberleri çekme kısmında takılıyorum acaba çektiğim id leri dize oluşturup bu dizeye aktarıp kullanmam mı lazım çözemedim tam olarak bir türlü. Pdo da çektiğim verileri dizeye nasıl aktarırım bunu da tam olarak çözemedim gerçi.

    hocam anladıgım sen haberleri kategorisine göre çekmek istiyorsun. bunun için subquery qullanabilirsin.

    örnek:
    $query = $db->prepare("SELECT * FROM haber as hbr where hbr.kat_id  IN (select id from hkat where id = hbr.kat_id) ");
    $query->execute();
     
    if ( $query->rowCount() ){
     
         foreach( $query as $haber ){
     
              echo $haber ['id']." = ".$haber['detay']."<br>";
    
     
         }
    }

    bu şekilde kullanabilirsiniz.
    burdaki kat_id , haber tablonuzu, kategoriyle bağladıgınız sütünun ismi,

    ve birdaha lütfen sorununuzu yazarken 2 satır bilgi vermeyin, biraz daha açın, kodları verin, veritabanı yapısını da verin. Lütfen bunlara dikkat edin.
  • 12-10-2016, 20:46:25
    #7
    arkadaşlar konuyu biraz fazla uzattım biliyorum ama yapmak istediğimi tam olarak malesef yapamadım en son @Vinsanity verdiği kodları şu hale getirdim:

    $query = $db->prepare("SELECT * FROM hkat");
    $query->execute();
    if($query->rowCount() > 0){
       while($row=$query->fetch(PDO::FETCH_ASSOC)){
          $query_haber = $db->prepare("SELECT * FROM haber WHERE kat = ? LIMIT 10");
          $query_haber->execute(array($row['id']));
          if($query_haber->rowCount() > 0){
             while($row_haber = $query_haber->fetch(PDO::FETCH_ASSOC)){
                echo $row_haber['baslik']." kategori: ".$row_haber['kat']."<br>";
             }
          }
       }
    }
    şuan kategoriye göre veri çekiyor şu şekilde çıktı veriyor:


    şimdi benim bu kod bloğunda kontrol yapısı kullanmam lazım yani spor haberlerini siyaset haberlerini ayrı ayrı bastırmalıyım:

    yukarıdaki resimdeki gibi siyaset haberlerinden 10 tane ekrana bassın altına spor haberleriden 10 tane bu hale kodları getirmek için mesela spor kategorisinin id 1 olsun siyaset kategori id 2 if içinde id 1 e eşitse haberler tablosundan kat sutunu 1 olan 10 haber ekrana bastır şeklinde yazmam gerek şuan ne dedemek istediğimi ben bile zor anlıyorum ama inşallah siz anlamıssınızdır.
  • 13-10-2016, 23:37:02
    #8
    konu güncell
  • 14-10-2016, 14:19:25
    #9
    $kategoriler = $db->query("SELECT * FROM kategori")->fetchAll(PDO::FETCH_ASSOC);
    
    foreach ($kategoriler as $kat) {
    	echo $kat["kategori_isim"] . ' kategorisinin haberleri';
    
    	$sql = $db->prepare("SELECT * FROM haberler WHERE kategori_id = ? ORDER BY  haber_id DESC LIMIT 10");
    	$sql->execute(array($kat["kategori_id"]));
    	$haberler = $sql->fetchAll(PDO::FETCH_ASSOC);
    	
    	foreach ($haberler as $hab) {
    		echo ' --- Haber başlığı : ' . $hab["haber_baslik"] . '<br>';
    	}
    
    	echo '<br><br>';
    }