Düzeyde Sayfalar

3 Cevap php

Üzgünüm, bu soru aptalca bulabilirsiniz, ama ben gerçekten yardıma ihtiyacınız varsa. İşte bu konuda bazı bilgiler bulunuyor.

Database structure


id | parent_id | seviye | isim

1 | 0 | 1 | Ana sayfa

2 | 1 | 2 | ana Çocuk

3 | 1 | 2 | ana başka çocuk

4 | 2 | 3 | sayfa id 2 Alt çocuk

5 | 3 | 3 | sayfa id 3 Alt çocuk


Question


Nasıl düzeyine göre benim satırlar grup SQL açıklama yapmak ve bu çıktıyı yapabilirim.

Desired output


Ana sayfa

~ ~ Ana Çocuk

Sayfa id 2 ~ ~ ~ ~ Alt çocuk

Web Sitesini ~ ~ Başka bir çocuk

Sayfa id 3 ~ ~ ~ ~ Alt çocuk

Ben bir özyineleme yöntemi ile bunu nasıl biliyorum, ama ben bir SQL deyimi ile bunu başarabilirsiniz olmadığını bilmek istiyorum. Teşekkürler.

3 Cevap

Doğru sıralanır böylece Eh, parent_id tarafından verileri sipariş verebilir:

$menu = mysql_query("SELECT * FROM menu ORDER BY parent_id, level, name");

Sonra, girinti belirlemek için seviyesini kullanın:

while ($row = mysql_fetch_object($menu)) {
  echo str_repeat('~~', $row->level).' '.$row->name.'<br />';
}

Eğer iç içe listelerde veya başka bir element (örneğin '~ ~' gibi bir önek ile girintili yerine) onları istiyorum ki:

$level = 0;
echo '<ul>';
while ($row = mysql_fetch_object($menu)) {
  if ($row->level > $level) {
    echo '<ul>';
  } else if ($row->level < $level) {
    echo '</ul>';
  }
  echo '<li> '.$row->name.'</li>';
  $level = $row->level;
}
for ($i = $level; $i >= 0; $i--) {
  echo '</ul>';
}

Ben sık sık bu gibi sorular için Storing Hierarchical Data in a Database Bu makaleyi tavsiye.

Sorunuzun cevabı evet, bunu sadece tek bir sorguda alabilirsiniz. Sizin yöntem (recursive) ilk sayfada tartışılmıştır. Modifiye Preorder Ağacı Geçişi (MPTT) tasarım alternatif çözüm, için sayfa iki göz atın. Bu set-up kullanarak, tek bir sorgu çalıştırmak ve yapısının belirli bir düğümün bütün çocuklarını alabilirsiniz. Çok şimdi ne benzer, ama oldukça aynı değil, ve uygulamak için iş biraz gerektirir.

Bununla birlikte, salt ağır uygulamada, MPTT büyük bir algoritmadır. Yazıyor yaparken tüm ağaç yapısını değiştirmek zorunda çünkü, biraz daha fazla çalışma gerektirir, ama orada kurmak var ne ben senin için çok iyi çalışır düşünüyorum.

Bu anlattığım, tam olarak sonucu dönecektir tek sorgu kullanılarak yapılabilir. Mysql sitede hiyerarşik veri üzerinde büyük bir öğretici var.

Siz "İç içe Set Modeli" düz gidebilir, ama ben bütün öğretici okuma öneririz.

Here's the link: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/