• 19-07-2013, 23:55:25
    #1
    Reveloper
    Merhaba,

    iki tablem var

    Kategori(id,kategori_adi)

    Alt_Kategori(id,ana_kategori_id,alt_kategori_adi)

    Sıralı ve düzenli mysql_fetch_array ile nası basıcam bunları? mantık yürütemedim bir basar o sırada fonksiyon yazmam gerekli güzel bişey olması için? nası bir yol izlemeliyim veya sizin bildiğiniz örnek bi yol varmıdır?

    <ul>ANA KATEGORİ 1</ul>
         <li>Alt Kategori 1</li>
         <li>Alt Kategori 2</li>
    <ul>ANA KATEGORİ 2</ul>
         <li>Alt Kategori 1</li>
         <li>Alt Kategori 2</li>
  • 20-07-2013, 01:07:10
    #2
    Öncelikle kendi uyguladığım basit mantığı anlatacağım, daha ileri seviye alt kategori sistemleri için php recursive function şeklinde google da arama yapabilirsin.

    Şimdi ilk olarak veri tabanından başlayalım. Veritabanın da kategoriler tablomuzda normal şekilde, kategoriID,kategoriAdi sütunlarımız olacak, buna ek olarak alt kategori sisteminde ustID diye bir sütun daha oluşturuyoruz, bu sütun eklenen kategorinin üst kategorisini çekmek için kullanılacak. Sistem şöyle işliyor, eğer eklediğimiz kategori ana kategori ise ustID = 0 yapıyoruz, eğer alt kategori ekliyor isek o alt kategorinin üst kategorisinin kategoriID değerini ekliyoruz. Sizin örnek gösterdiğiniz listeleme şeklini oluşturmak içinde şu kodu kullanabiliriz.
    <?php
     $anaSql = mysql_query("select * from kategoriler where ustID=0);
    ?>
    Bu şekilde ana kategorileri veritanından çektik, şimdi listeleyelim.
    <?php 
      while($anaRow = mysql_fetch_array($anaSql)){
          echo ' <ul><span>'.$anaRow["kategoriAdi"].'</span>';
          $altSql = mysql_query("select * from kategoriler where ustID='$anaRow[katID]'");
            if(mysql_affected_rows()){
               while($altRow = mysql_fetch_array($altSql)){
               echo '<li> '.echo $altRow["kategoriAdi"].'</li>';
                }
           }
    echo '</ul>';
      }
    
    ?>
    Bu şekilde listeleme işlemini tamamladık. Yaptığımız şey ise, ilk başta ki kod ile ana kategorileri getirmiştik onları while döngüsüne sokup, tek tek o ana kategoriye ait alt kategori olup olmadığını kontrol ediyoruz. mysql_affected_rows() fonksiyonu da kaba tabirle, en son sql sorgusundan geriye true değer dönüp dönmediğini kontrol ediyor. Yani eğer alt kategori var ise, o if blokunun içerisini yazdırıyor. Alt kategorileri de sql ile çektikten sonra bir while daha oluşturup, onları da yazdırmış olduk. Eğer ki hiç alt kategorisi olmayan bir ana kategori eklendiğinde, sadece ana kategorinin ismi yazar. Umarım anlatabilmişimdir
  • 20-07-2013, 02:29:20
    #3
    Üyeliği durduruldu
    iç içe döngü kullanmayın arkadaşlar join deneyin
  • 20-07-2013, 11:05:40
    #4
    BHCoder adlı üyeden alıntı: mesajı görüntüle
    iç içe döngü kullanmayın arkadaşlar join deneyin
    ben hep iç içe döngü kullanıyorum ve hatalı olduğunu biliyorum, "sql join" yöntemini bilmediğim için. Nasıl öğrenebilirim karşılaştırmalı makale var mı bildiğiniz?
  • 20-07-2013, 17:37:29
    #5
    Reveloper
    bu neden çalışmaz?

    <?php
    $get_category = mysql_query("SELECT  title, seo FROM categories INNER JOIN categories_root ON categories.root_cat = categories_root.id");
    while ( $list_category = mysql_fetch_array($get_category) ){ // while
    echo '
    Ana Kategori: '.$list_category["categories_root.root_cat_name"].'
    '.$list_category["categories.title"].'
    
    ';
    } ?>


    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 17:37:29 -->-> Daha önceki mesaj 17:01:38 --

    çalıştırdım arkadaşlar ancak iki tablodada seo sütunu var onu nası çekciez?

    <?php 
    $get_category = mysql_query("SELECT  * FROM categories INNER JOIN categories_root ON categories.root_cat = categories_root.id") or die(mysql_error()); 
    while ( $list_category = mysql_fetch_array($get_category) ){ // while 
    echo ' 
    Ana Kategori: '.$list_category["root_cat_name"].' </br>
    <strong>alt</strong>: '.$list_category["title"].' </br>
    <strong>alt seo</strong>: '.$list_category["seo"].' </br>
    </br></br>
    
    '; 
    } ?>
  • 20-07-2013, 18:08:36
    #6
    Burti adlı üyeden alıntı: mesajı görüntüle
    bu neden çalışmaz?

    <?php
    $get_category = mysql_query("SELECT  title, seo FROM categories INNER JOIN categories_root ON categories.root_cat = categories_root.id");
    while ( $list_category = mysql_fetch_array($get_category) ){ // while
    echo '
    Ana Kategori: '.$list_category["categories_root.root_cat_name"].'
    '.$list_category["categories.title"].'
    
    ';
    } ?>


    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 17:37:29 -->-> Daha önceki mesaj 17:01:38 --

    çalıştırdım arkadaşlar ancak iki tablodada seo sütunu var onu nası çekciez?

    <?php 
    $get_category = mysql_query("SELECT  * FROM categories INNER JOIN categories_root ON categories.root_cat = categories_root.id") or die(mysql_error()); 
    while ( $list_category = mysql_fetch_array($get_category) ){ // while 
    echo ' 
    Ana Kategori: '.$list_category["root_cat_name"].' </br>
    <strong>alt</strong>: '.$list_category["title"].' </br>
    <strong>alt seo</strong>: '.$list_category["seo"].' </br>
    </br></br>
    
    '; 
    } ?>
    SELECT *,categories.seo as catseo,categories_root.seo as rootseo FROM categories INNER JOIN categories_root ON categories.root_cat = categories_root.id


    Gibi kullanabilirsin.
  • 20-07-2013, 18:22:07
    #7
    ulast adlı üyeden alıntı: mesajı görüntüle
    ben hep iç içe döngü kullanıyorum ve hatalı olduğunu biliyorum, "sql join" yöntemini bilmediğim için. Nasıl öğrenebilirim karşılaştırmalı makale var mı bildiğiniz?
    join kullanımı çok basittir örnek olarak şu şekilde yapabilirsiniz

    kategoriler:
    id | kategori_adi

    altkategoriler;
    ana_kategori_id | kategori_adi

    SELECT kategoriler.kategori_adi , altkategoriler.kategori_adi FROM kategoriler INNER JOIN altkategoriler ON altkategoriler.ana_kategori_id = kategoriler.id
  • 20-07-2013, 21:05:16
    #8
    Reveloper
    GOLDTR adlı üyeden alıntı: mesajı görüntüle
    join kullanımı çok basittir örnek olarak şu şekilde yapabilirsiniz

    kategoriler:
    id | kategori_adi

    altkategoriler;
    ana_kategori_id | kategori_adi

    SELECT kategoriler.kategori_adi , altkategoriler.kategori_adi FROM kategoriler INNER JOIN altkategoriler ON altkategoriler.ana_kategori_id = kategoriler.id
    ben şunu istiyorumda yapamadım bi türlü

    -Ana KATEGORİ
    --Alt Kateogori
    --alt Kategori 2
  • 20-07-2013, 21:19:04
    #9
    Üyeliği durduruldu
    Arkadaslar yardimci olup sql vermisya neyi yapamadin hatani veriyor

    Samsung Galaxy S3 tapatalk 2 ile gonderildi.
    Yazim yanlislari varsa affola.