Sonsuz Üyelikte Üye Sayısı

Kodla Büyü

phantosos

Seçkin Üye
Seçkin Üye
Mesajlar
278
Arkadaşlar selam, bir proje de enterasan bir sorun ile karşı karşıyayım, bir türlü çözüm üretemedim. Akıl akıldan üstündür derler, fikri olan varsa sevinirim. Bir access veritabanı var, sonsuz menü yapısının sonsuz üyelik olayına çevrilmesi durumu. Alt alta sonsuz sayıda üye ekleyebiliyorsunuz bir farkla her üyenin solda ve sağda en fazla iki alt üyesi olabilir. Bu durum veritabanında Placement alanında tutuluyor ve Left ve Right olarak, kod ile de eğer iki tarafıda dolu ise yeni üye eklenemiyor. Sayfa görünümü ise diğer resimdeki gibi. Burada ise css ve js ile veritabanındaki üyeler görsel olarak sayfada gösteriliyor belki fikir verir. Sorun şu; her iki tarafta kaç tane üye olduğunu nasıl bulursunuz. Yani sol tarafta 4 üye var, sağ tarafta ise 3 ten sonra dallanma yapmış durumda. Dallanmalar tek üye olarak sayılacak. Yani sağda 4 ten iki tane var ama 1 olarak sayılması lazım. Bu şekilde sonsuza kadar giden durumda solda atıyorum 10, sağda atıyorum 8 tane üye var diye bir sorgu veya kod lazım. Fikri olanlara şimdiden teşekkür ederim.

Görsel Kısım:

Veritabanı:

İstenen:
 

Ekli dosyalar

  • deneme1.jpg
    deneme1.jpg
    36.9 KB · Görüntüleme: 1,177
  • deneme2.JPG
    deneme2.JPG
    40.7 KB · Görüntüleme: 1,177
  • deneme3.jpg
    deneme3.jpg
    11.8 KB · Görüntüleme: 997
Hocam yazdıklarınızla resmi eşleştirmekte zorlanıyorum. Solunda sağında iki toplamda dört üyesi olan yok sanırım resimde

Soru şuna benziyor mu ?
Sonsuz alt kategori olacak
Fakat her kategorinin solunda sağında en fazla 2 alt kategori olacak.


bu durum sizin durumunuzla örtüşüyormu
 
Alpay hocam ilginiz için teşekkür ederim, anlatım bozukluğundan dolayıda kusura bakmayın lütfen.
Id: alanı üyenin id numarası
Parent_Id: alanı üyenin bağlı olduğu üyeyi ifade ediyor. Örnek resimde 2 ve 3 numaralı üyeler 1 numaralı üyeye bağlı. Biri Left'te, diğeri Right'ta. Placement bunu ifade ediyor.
Referans_Id: bu üyenin hangi üye tarafından kayıt altına alındığını ifade ediyor. Örnek olarak 1,2,3,4 nolu üyeler 1 nolu üye tarafından kayıt altına alınmış.

Fakat her kategorinin solunda sağında en fazla 2 alt kategori olacak.
aynen doğru söylüyorsunuz.

Sıkıntı şu: solda ve sağda üye sayılarına bulmaya çalışıyorum. Yani sol tarafta 10 üye var, sağ tarafta 8 üye var gibi. Problemi dallanmalar ortaya çıkarıyor. Örneğin sol taraftaki 4 nolu üyenin altında 5 nolu üye var ama benim bunu tek saymam lazım, yani sadece 1 üye varmış gibi. Bir altta ise 6 nolu üye var ama benim bunu tek 6 olarak saymam gerekiyor. Bunun içinden çıkamadım.

İzlediğim yollar:
a) içi içe 2 dizi oluşturdum ama sanki içi içe sonsuz dizi ile çözülmesi gerekiyor gibi??
b) Sql ile çözeyim dedim tıkandım.
c) Kayıt esnasında farklı bir tablo açıp oraya yazdırayım dedim onu da beceremedim ve resmen kafam durdu.

Fikirleriniz ve ilginiz için tekrar teşekkür ederim. Bu arada lemmings hocam size de teşekkür ederim, en azından okuma zahmetinde bulunmuş ve fikir yürütmeye çalışmışsınız.
 
Hocam çözülemeyecek bir şey yok yeter ki sistematik gidin. Hatta problemi burda anlatmaya çalışmanız bile yeni fikirlerin filizlenmesini sağlar.

Şimdi şunada açıklık getirelim bu kayıtların sayısını sadece iki ana südundamı yapmak istiyorsun. Sağ ve Sol
alt dallanmaların önemi yok mu ?

Resmin solundaki ana dal ile sağındaki ana daldaki üye sayıları lazım fakat aynı üye altındaki dallanma 1 sayılacak.

Ben yanlış anladım sanırım her üyenin kendi altında sağ ve sol olmak üzere 2 + 2 toplam 4 olacak oysa durum farklı.
olay iki ana sütun üzerinde

Ayrıca siz üye sayısını istemiyorsunuz sanırım. Çünkü dallanmaları 1 sayacaksınız
 
Hocam bildiğim kadarıyla buna nested set model deniyor. Genellikle içiçe (recursive) fonksiyonlar yerine daha performanslı olduğu için tercih ediliyor sınırsız alt elemanlı işlemlerde. Ben baktığımda anlamadım. Belki siz bu terimle(nested set model) arayarak bi sonuca ulaşabilirsiniz.
 
Son yazdıklarıma cevap alırsam kafamda bir şeyler şekillenir diye bekliyorum. :+1:
 
bekirweb' Alıntı:
Hocam bildiğim kadarıyla buna nested set model deniyor. Genellikle içiçe (recursive) fonksiyonlar yerine daha performanslı olduğu için tercih ediliyor sınırsız alt elemanlı işlemlerde. Ben baktığımda anlamadım. Belki siz bu terimle(nested set model) arayarak bi sonuca ulaşabilirsiniz.
Bunu bilmiyordum,
olayını şimdi araştırıyorum, bilgi için çok sağ olun hocam.
 
Alpay hocam ilk mesajda düzenleme yaptım, son resim ulaşmaya çalıştığım sonuç. belki daha yararlı olur??
 
Şöyle bir algoritma üzerinde düşünelim.

soldaki tüm üye sayılarını bulalım dallanmış dallanmamış fark etmez bu mümkünmü. Çünkü anladığımdan emin değilim

Buna SoldakiTumUyeSayisi diyelim

Gene soldaki üyeler içinde birden fazla alt üyesi olanların sayısını bulalım. Bu soldaki dallanmaların sayısıdır aynı zamanda.
budada SoldakiDallanmaSayisi diğelim

her dallanma 1 sayılacaksa ve her dallanma 2 tane üye içeriyorsa demekki dallanma başına 1 üye azaltmak lazım.

soldakiSonuc = SoldakiTumUyeSayisi - SoldakiDallanmaSayisi


Kod yazmadan bu yöntemin sağlamasını yap. dersanede matematik çözdüğünü farz et. sakın kodlarla yapma. eyer bu algoritma çözüyorsa sonra kodları yazarsın.
 
Hocam son resminizi görmeden yazdım önceki mesajımı.
Fakat anlayamadım. Size her seviyedeki sayımı lazım. toplam sayımı
 
Deniyorum hocam, önce kağıt üstünde sonra kodla. Bir gelişme olursa burada haber veririm. Eğer aklınıza başka bir yöntem gelirse ben sağlamasını yapana kadar, yine çok müteşekkir olurum. Bana her seviyede ki sayı lazım, dallanmaların önemi yok. yani solda 6 nın altında 4 dallanma olabilir maksimum ama benim için önemli değil, önemli olan veritabanındaki yapıya göre sol tarafta kaç seviye olduğunu bulmak. Sol tarafta dallanmaları dikkate almadan kaç seviye var, aynı şey sağ içinde geçerli??
 
Boşuna deneme hocam benim yazdıklarım toplam sayı için. Fakat sen ilk mesajında seviyelerden hiç bahsetmemişsin.
 
Alpay hocam aslında son resim ne bulmak istediğimi açıklıyor. 1 resimdeki yapıdan son resimdeki gibi solda 6 sağda 5 seviye var gibi bir noktaya gelmeye çalışıyorum.
 
phantosos' Alıntı:
Deniyorum hocam, önce kağıt üstünde sonra kodla. Bir gelişme olursa burada haber veririm. Eğer aklınıza başka bir yöntem gelirse ben sağlamasını yapana kadar, yine çok müteşekkir olurum. Bana her seviyede ki sayı lazım, dallanmaların önemi yok. yani solda 6 nın altında 4 dallanma olabilir maksimum ama benim için önemli değil, önemli olan veritabanındaki yapıya göre sol tarafta kaç seviye olduğunu bulmak. Sol tarafta dallanmaları dikkate almadan kaç seviye var, aynı şey sağ içinde geçerli??

Hocam ilk mesajda istediklerinle bu mesajındakiler çok farklı. Ben sizi anlayamıyorum.
Seviye sayısımı ? Her seviyedeki sayımı ? toplam sayımı
 
Seviye sayısı, sanırım anlatamadım. Yani bütün üyelikler içinde solda 6.seviye, sağda 5. seviye gibi. Her seviyedeki sayı değil, üye sayısını bulabiliyorum. Önceli olan solda kaç seviye olmuş, sağda kaç seviye olmuş gibi düşünelim hocam.
 
işin içine seviye saysı giriyorsa durum farklı

1 - soldaki tüm kayıtları çekeceksin (id küçükten büyüğe doğru sıralı olarak)
2- kayıtlara tek tek bakacaksın alt üyesi var mı?
Eğer varsa seviyeyi bir artıracaksın yoksa sıradaki üyeye geçeceksin seviyeyi bir azaltacaksın.
Birde seviyenin ulaştığı en büyük sayıyı saklamalısın. Eğer seviye sonSeviyeyi geçerse sonSeviyeye = seviye şekilde güncellemelisin.
Bu senin aradığın seviye olacak.

Aşağıda temsili kod yazdım inşallah anlarsın. Birazda sen anlamaya çalış :)

Kod:
$seviye = 0;
$ulasilanSonSeviye=0;

function uyeler(){
    $uyeler =...veritanında solda olanları çek (id küçükten büyüğe sıralı olarak çek)
   foreach($uyeler){
       altUyeVarmi($uyeler->id);
   }
}

function altUyeVarmi($id){
     $altuyleriGetir =...veritanında parent idsi $id olanları çek
       if(count($altuyleriGetir )){
            $seviye++;
             
               foreach($altuyleriGetir ){
                         altUyeVarmi($altuyleriGetir ->id);
                 }
            if($seviye>$ulasilanSonSeviye){$ulasilanSonSeviye=$seviye;}
       }else{
             $seviye--;
        }
        
 }


uyeler();
 
Hocam eline sağlık koddan anlamaya çalışırım, bu kadar saat zahmet verdim sana. İnşallah başka bir konuda da benim sana yardımım dokunur. Eline, emeğine sağlık.
 
Hocam daha önce bir kaç defa sonsuz kategori ve menü ile işim olmuştu kendi yöntemimle çözmüştüm. Daha kısası var mı bilmiyorum.
Size yazdığım kodlar düz metin gibi bir şey :) ilk bakışta kafanız karışa bilir ısrarla anlamaya çalışırsanız sizin için büyük bir tecrübe olur. Kafanız karışırsa biraz ara verin sonra tekrar bakın. Anlamadığınız yerleri yazın yarın cevaplarım.
 
Geri
Üst