Mysql sorgusu kullanarak tüm iç içe alt bulmak için en yoğun yolu

4 Cevap php

Ben ürün kategorilerinde yer alması olduğu bir veritabanı var. Bu kategorilerden bazıları öylesine bir örnek olarak, iç içe:

Animals > Birds > Parrots  
Animals >  Birds > Penguin 
Animals > Mammals > Cats  
Animals > Mammals > Dogs 
Animals > Reptiles > Snakes 
Plants > Trees 
Plants > Flowers

vb

I çizgisinde Tablodaki bu var

CATEGORY    PARENT
Animals     -
Birds       Animals
Penguin     Birds

vb

Ben diyelim ki, Hayvanlar başlangıç ​​noktası almak ve hayvanlar için biz Memeliler, Sürüngenler, Papağanlar, Penguen, kediler, köpekler, yılanlar, kuşlar yer olurdu böylece, bunun altında gelir kategorilerini tüm listelemek mümkün olmak istiyorum

Bu bir tek qury ile mümkün mü? Eğer değilse, ne yapmam gerekir

TIA

4 Cevap

Eğer şema bazı hiyerarşi meta veri ekleyebilir eğer tek bir sorgu ile bunu yapmak mümkün ve verimli.

Kategoriniz tabloya iki tamsayı sütun (start ve end) ilave edin. (Çıkarken Sonra ağacın bir derinlik ilk geçişi her adımda bir sayacı artırma ve bir düğüm girerken start için sayaç değerini atama ve end için ne yani, tüm o çocukları ) işlenmiş.

Bu yüzden, örneğin, gösterildiği gibi değerlerle (start,end),

Animals (1,18)
   Birds (2,7)
      Parrots (3,6 )
      Penguin (4,5)
   Mammals (8,13)
      Cats (9,12)
      Dogs (10,11)
   Reptiles (14,17)
      Snakes (15,16)
Plants (19,24)
   Trees (20,23)
   Flowers (21,22)

Şimdi Hayvanlar almak seçmek ve sadece bu sorgu gibi bir şey çalıştırabilirsiniz çocuklar var için:

SELECT * FROM Category where start >=1 and start < 18

Açıktır ki hiyerarşi okuma sorguları için verimlilik karşı değiştirdiğinde meta yeniden inşa maliyeti tartmak var. Görece statik hiyerarşileri için bu teknik oldukça iyi çalışıyor.

SQL hiyerarşik veri kateden de herkesin bildiği kötü.

Ben bu programı ve yinelemeli veya yinelenen tüm çocukları bulur.

Aşağıdaki sözde kod (verilerde hiçbir döngüler varsa) çalışması gerektiğini

  • Dizi A hayvanların çocuklarını eklemek
  • index = 0
  • while index < length(A)
    • Diziye çocukları (A [i]) append
    • index + = 1

Hiyerarşisinde döngüler varsa size dizideki veya döngü zaten çocukları ekleme yok emin tüm belleği ve çökme tüketir yapmak gerekir

Sen uzakta özyineleme almak ve çocuk sayısı, aşağıdaki "Modifiye Preorder Ağacı Geçişi" Aşağıdaki makale ile tek bir SQL sorgusu kullanarak içinde acil kategori ve alt kategorileri bulmak için tek sorguları kullanabilirsiniz:

  1. Managing Hierarchical Data in MySQL

Aynı deseni açıklar sitepoint.com üzerinde bir makale okumak için anahtar kelimeler "Modifiye Ağaç Geçişi + SitePoint" için google.com ara.

Ben verileri almak için mysql işlemleri hakkında çok fazla bilmiyorum ama biz PHP yardımı ile tek mysql sorgusu kullanarak iç içe veri alabilir, herhangi bir dil için aynı mantığı kullanabilirsiniz.

http://www.maheshchari.com/php-nested-categories-with-single-mysql-query/