İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

Bir ürünü eklerken birden fazla kategoriye ekleme

Grafix

0
İyinet Üyesi
Katılım
16 Aralık 2006
Mesajlar
1,153
Reaction score
0
Konum
Bursa
arkadaşlar merhabalar,
bir sorunum var yalın bir dille anlatmaya çalışayım,yardımcı olacak arkadaşlara şimdiden teşekkürler..

sınırsız kategorileme (recursive) sistemi olan bir alışveriş sitesi üzerinde çalışıyorum, sorunum şu;

kategori tablom;

id | ustkat_id | kategori_adi

şeklinde.

ürün eklerken bir ürünü birden fazla kategoriye eklemek ve listelemek istiyorum.

örnek veriyorum;

ekte gönderdiğim resimden daha iyi anlayabilirsiniz..

mesela ziyaretçi "Okul Ürünleri" başlığına tıklayınca;

Kalemler-Silgiler kategorilerindeki ürünler listelensin..

PHP:
function Listele($kategori_id,$derinlik){
   # Sorgu cümlesi
   $cumle = "select *, find_in_set(".$kategori_id.",ustkat_id) as seviye from kategoriler having seviye = 1";
   $sorgu = mysql_query($cumle);    
    
   # Kayitlari bas
   while($sonuc                = mysql_fetch_array($sorgu)){    
   $kategori_adi            = $sonuc["kategori_adi"];
   $kategori_id                = $sonuc["id"];
        
   # Kategori bilgilerini bas, Alt kategorileri (varsa) bas    
   echo '
  <td bgcolor="#E9E9E9" class="kategoriler">'.$derinlik.'<a href="kategori.php?kategori_id='.$kategori_id.'">'.$kategori_adi.'
  </a>
  </td>  
   </tr>';
   Listele($kategori_id,$derinlik."  <img src='images/arrow_right.gif' >");
   }
   return;
   }

Listele(0,"");
            
$kategori_id = $_GET["kategori_id"];

$sor    = mysql_query("select * from urunler where katid='$kategori_id' order by urun_id");
                while($cek=mysql_fetch_array($sor)){
$id         = $cek["urun_id"];
$urunadi    = $cek["urunadi"];

echo $urunadi."<br>";

}
bu kod düzeneği ile kategorileri listeliyorum fakat ana kategorilere tıkladığımda hiç bir ürün gelmiyor doğal olarak..

nasıl bir çözüm yolu gösterebilirsiniz?

teşekkürler.

graphic1.jpg
 

eRLySL

0
İyinet Üyesi
Katılım
25 Mart 2008
Mesajlar
424
Reaction score
1
Checkbox ile kategorileri listeletip veritabanına basarken , (virgül) ile ayırıp basın. Çekerken ise, tüm verileri alıp, ufak bir kontrol ile verileri listeletin.
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
Yaptığın hiyerarşik sıralamada sonsuz seviye varsa, yeni başlarken değiştirmeni öneririm. Komşu tipi hiyerarşide kaç seviye aşağı gideceğini bilmediğin için SQL ile sorgu yapamazsın. (Stored Procedure desteği almadan)

Tek yapabileceğin şey recursive bir fonksiyon ile Ana Kategoriye bağlı tüm alt seviyeleri toplamak ve ona göre ürün sorgusu yapmak. Aşağıda hızlı bir örnek yaptım, yanlışlık olabilir ama genel mantığı alırsın. Önce tüm kategori idlerini toplayıp sonra genel ürün query'ni yaparsın bu modelde.

Sonsuz hiyerarşili tablolarda Nested Set diye ayrı bir teknik kullanılır, basitçe, tüm kategorilerin, alt elemanlarının alt ve üst limitleri belirlenir ve ona göre sistem oluşturulur. Görsellik olmadan anlatmak çok zor onu, nested set hierarchy mysql diye arattığında baya örnek çıkıyor.

http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

Recursive yaparım dersen o da olur, ama seviyen ve kategoriler çoksa, cache sistemi kurman iyi olur. Her seferinde recursive sorgu verimsiz olur.



PHP:
<?PHP
$list = array();
$list = find_all_cats('1');



/* urun eslestirme tablonu bilmiyorum salliyorum */

foreach ($list as $li) {
$l[]= "'".$li."'";
}
$list = implode(',',$l);

$q = mysql_query("SELECT urun FROM urunler WHERE urun_id IN
  (SELECT urun_id FROM urun_kat_match WHERE kat_id IN ($list))");

/* gibi bisi */

function find_all_cats($id) {
global $list;
$list[] = $id;

$q = mysql_query("SELECT id FROM kategoriler WHERE ustkat_id='$id'");

	if (mysql_num_rows($q) != '0') {
	
		while ($a = mysql_fetch_array($q)) {
		$list = find_all_cats($a['id']);
		}
		
	}
	
return $list;
}
?>
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst