Özel alana göre sıralama ve DB bütün ağaç getiriliyor

1 Cevap php

I am trying to do file browser in a tree form and have a problem to sort it somehow. I use PHP and MySQL for that. I've created mixed (nested set + adjacency) table 'element' with the following fields:

element_id, left_key, right_key, level, parent_id, element_name, element_type (enum: 'folder','file'), element_size.

Kullanıcının diğer tabloya eleman (adı, tipi, büyüklüğü) hakkında bilgi taşımak için daha iyi olduğunu şu anda tartışmak vermeyelim.

Belirtilen dizini tarama ve doğru tablo çalışmalarını doldurmak için çalışır. Birinci ve daha sonra dosyaları klasörler: Kayda Değer, ben belirli bir sırayla ağaca unsurlar ekleyerek duyuyorum.

Bundan sonra ben kolayca getirebilir ve basit bir sorgu kullanarak sayfadaki tüm tablosunu görüntülemek:

SELECT * FROM element WHERE 1=1 ORDER BY left_key

O sorgu ve başka bir işlevin sonucu ile i doğru html kodunu (<ul><li>... and so on). ağacı görüntülemek için üretebilir.

Now back to the question (finally, huh?). I am struggling to add sorting functionality. For example i want to order my result by size. Here i need to keep in my mind whole hierarchy of tree and rule: folders first, files later.

Ben PHP özyinelemeli sorguda üreterek bunu inanıyorum:

SELECT * FROM element WHERE parent_id = {$parentId} ORDER BY element_type (so folders would be first), size (or name for example) asc/desc

Bundan sonra = 'klasörü' türünde her sonuç için ben onun içeriği almak için başka bir sorgu gönderir.

Ayrıca left_key tarafından ve dizi olarak PHP bu tür ondan sonra bütün ağaç almak mümkün ama o daha kötü olurdu sanırım :)

Ben böyle bir şey yapmak daha iyi ve daha verimli bir yolu olup olmadığını merak ediyorum?

1 Cevap

Sana ihtiyacım verilerle çeşit bir önbelleğini günceller ikincil bir komut ile bu yaklaşım olacaktır. Her yük için bir özyinelemeli sorgu dizi olması sorun (kullanım ve diğer faktörlere bağlı olarak, belki biraz, belki bir sürü) anlamına gelebilir.

Bu hepsi aynı anda gösterilir ise, ben şahsen onunla memcached dizi ve güncellemeleri yaratan bir sorgu çalıştırmak olacaktır. Benim ihtiyaçlarına bağlı olarak, ben (o olmasaydı) o (veri sık sık değişti ise) her 15 dakikada bir çalışacak ya da iki saat olurdu. Ben bir varsa, (Ben mübarek değilim, çünkü sunucuların bir çift, bir böyle iş için bir arka-uç makine olmak zorunda) başka bir makineden bu kaçardım.

Memcache mevcut değildir, ya da bir seferde sadece tek bir düzeyi yüklüyorsanız, ben en azından boyutunu saklamak ve özyinelemeli boyutu ile bu klasörleri güncellemek için bir alan eklemek isterseniz. Bu şekilde sadece görüntülediğiniz düğüm düzeyini çekmek olurdu ve boyutta veri, orada daha fazla seviyeleri aşağı sorgulamak gerek olacaktır.