v2.5.2
Giriş yap

Boş olan kategoriyi göstermeme işlemini nasıl yaparım?

0kan87
505 defa görüntülendi

kategoriler

idnameparentId
1Mobilyalarnull
2Masalar1
3Yemek Masaları2
4Çalışma Masaları2
5Giyimnull
6T-Shirt4

Öz yinelemeli fonksiyon ile listeleyebildigim bir tablom var.
Bu tabloya göre, en üst kategori Mobilyalar ve Giyim. Alt kategoriler ise Yemek Masaları ve diğerleri...

urunler

idurun_adikat_id
15 Kişilik Masa3

Ürünler tablomda bulunan ürün Yemek Masaları kategorisine ait bir ürün dolayısıyla ben yukarıdaki kategori ağacının içerisinde ürün olduğu için basmak, icerisinde ürün olmayan diğer kategori ağaçlarını ise basmamak istiyorum.

Daha açıklayıcı olmak gerekirse ürünler tablomda Giyim veya T-Shirt kategorisine ait bir ürün olmadığı için Giyim ve onun alt kategorisi olan T-Shirt kategori ağacını basmamak istiyorum.

Elde edilmek istenen

Mobilyalar
-Masalar
--Yemek Masaları

Fonkisyonum

function sinirsizKategori($elemanlar,$parentId = 0){
  $cikti = array();
  foreach ($elemanlar as $eleman) {

    if($eleman['parentId'] == $parentId){
      
      $cocuk = sinirsizKategori($elemanlar,$eleman['id']);

      if($cocuk){
        
        $eleman['cocuk'] = $cocuk;
        
      }else{
        $elaman['cocuk'] = array();
      }

      $cikti[] = $eleman;
    }
    
  }

  return $cikti;
}
Cevap yaz
Cevaplar (6)
0kan87
1024 gün önce

@ibrahimali nasıl bir yol izlediğini anlatırsan kodlayabilirim. Şuan mantık dahi kuramıyorum.

ibrahimali
1024 gün önce

Selam bende böyle sınırsız kateqorili bir sistem oluşturmuşdum. Burda tıkandım sonunda. Bir çözümünü buldum. Sadece olarak çox uzun yazarak anlata bilirmiyim onuda bilmiyorum. Ama eve gitdiğimde deneyeceğim.

0kan87
1025 gün önce

Sorum yanlış anlaşıldı sanırım. Null olan veya olmayan değerleri bularak nasıl yapılabilir anlamadım. Ben boş olan kategorileri göstermek istemiyorum derken değer olarak boş olan kategorilerden bahsetmiyorum. Join ile birlestirme yaptığımda içinde ürün olmayan kategoriler mantık olarak boş kategori oluyor bunlar gelmesin istiyorum, bunu da join ile yapabiliyorum ancak, bazi alt kategorilerin ust kategorileri de ver onlari nasil getirebilirim? Yani alt kategoride ürün mevcut
ise o kategorinin üst kategorisi de listelenmesi gerek.

qplot
1028 gün önce

IS NOT NULL da kullanabilirsin en basiti :)

0kan87
1030 gün önce

Benim çözümüm de ilk başta sql ile oldu.

$kategoriler = $db->from('kategoriler')->join('urunler', '%s.kat_id = %s.id')->all();

Ancak bu şekilde yukarıdaki örneğe göre ben sadece, Yemek Masaları kategorisine erişebiliyorum aslında onun da üst kategorileri var yani Yemek Masaları kategorisi çocuk hatta torun kategori:)
Onun atalarını da getirmem lazım. Bu şekilde çözemeyince php tarafında çözüm aramaya başladım.

tayfunerbilen
1030 gün önce

yapacağın şey $elemanlar değişkeninde sanırım db'den kategorileri çekiyorsun, join ile urunler tablona bağlanacaksın, böylece sadece ürün olan kategorileri döndürecek join eşleşmesinden dolayı, fonksiyonda bir şey yapmaya gerek yok.

şöyle bir sorgu olabilir

select kategoriler.* from kategoriler
inner join urunler on urunler.kat_id = kategoriler.id