Derinliğine bir sınırlama yoktur.
Yapılandırılmış şube hatta tüm ağaç almak nasıl?
Managing Hierarchical Data in MySQL: tanımı buradan bir
Derinliğine bir sınırlama yoktur.
Yapılandırılmış şube hatta tüm ağaç almak nasıl?
Managing Hierarchical Data in MySQL: tanımı buradan bir
Ben sizin için soruyorsun oldukça ne emin değilim, ama bu tüm ağaç, yol başına bir hattı alabilirsiniz fazlalaştı kullanarak MySQL tamamen şöyle bir dizge olarak her yol GROUP_CONCAT ve http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ adlı örneği "Tek Yol alınıyor" genişletilmesi
SELECT
GROUP_CONCAT(parent.name ORDER BY parent.lft ASC SEPARATOR '|')
FROM nested_category AS node
CROSS JOIN nested_category AS parent
WHERE
node.lft BETWEEN parent.lft AND parent.rgt
GROUP by node.id
ORDER BY node.lft;
Bu irade çıktı ağaçtaki her düğüm için yollar.
nested_category AS node CROSS JOIN nested_category AS parent
nested_category AS node, nested_category AS parent
eşdeğer olduğuna dikkat edin.
Bu dizeyi belirtir kullanır '|'
ayırıcı olarak, size yol öğelerinden ve bir diziye bu patlayabilir istiyorsanız Eğer bunun yerine belirttiğiniz verebilecek veri değil bir dize var biliyorum.
Ben de benzer bir kullanımı, aynı zamanda çocuğun ebeveyn için bir referans tutar oldukça aynı yaklaşım; Bu kolay verilerden bir ağaç yapısı bina yapar. Bu faydalı ise, PHP bir ağaca veri ayıklamak için kod gönderebilir.
@ Marc, açıklanan veri yapısı ayarlamak işlemleri yapmak için ille de değildir; Sadece kolay yapısı ile çalışma yapar. Eğer veri bütün bir ağacı olsun istiyoruz ve her kayıt sadece üst kaydın bir işaretçi saklar, o zaman özyinelemeli veri tam ağacı almak için veritabanını sorgulamak gerekir. Orada açıklanan yaklaşımı kullanırsanız, o zaman bir sorguda tüm set elde edebilirsiniz.
Edit: -> ana referans yanı sıra lft / sağ şeyler burada bir çocuk korumak IF bir ağaç yapısı oluşturur kod. Sadece ağacın tek bir düzeyde doğrudan soyundan almak istiyorsanız yine hızlı aslında bu yolu çünkü, bunu tercih ederim.
Ben şartları göstermek için geri şerit denedim, bu yüzden vb bazı yazım hataları olabilir ama fikir almalısınız. Önemli parçalarıdır
Her neyse, burada kod -
<?php
$children = mysql_query('SELECT * FROM nested_category ORDER BY lft ASC');
/* Get the first child; because the query was ordered by lft ASC, this is
the "root" of the tree */
$child = mysql_fetch_object($children);
$root = new StdClass;
$root->id = $child->folderID;
$root->children = array();
/* Store a reference to the object by the id, so that children can add
themselves to it when we come across them */
$objects = array($root->id => $root);
/* Build a tree structure */
while ($child = mysql_fetch_object($children)) {
/* Create a new wrapper for the data */
$obj = new StdClass;
$obj->id = $child->id;
$obj->children = array();
/* Append the child to the parent children */
$parent = $objects[$child->parent];
$parent->children[] = $obj;
$objects[$obj->id] = $obj;
}
Ben Sol ile yapacağını linke bakarak Katıldı. Tam Ağacı alınıyor örneğe bakın.
SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4
FROM category AS t1
LEFT JOIN category AS t2 ON t2.parent = t1.category_id
LEFT JOIN category AS t3 ON t3.parent = t2.category_id
LEFT JOIN category AS t4 ON t4.parent = t3.category_id
WHERE t1.name = 'ELECTRONICS';
You wold need an LEFT JOIN for every hierarchical level you want to include.
The result then can be parsed by php into any desirable data structure. Just ignore NULL
results.
| ELECTRONICS | TELEVISIONS | TUBE | NULL |
| ELECTRONICS | TELEVISIONS | LCD | NULL |
| ELECTRONICS | TELEVISIONS | PLASMA | NULL |
| ELECTRONICS | PORTABLE ELECTRONICS | MP3 PLAYERS | FLASH |
| ELECTRONICS | PORTABLE ELECTRONICS | CD PLAYERS | NULL |
| ELECTRONICS | PORTABLE ELECTRONICS | 2 WAY RADIOS | NULL |
Eğer derin bir yapıya sahip olduğunda MySQL birçok tablolar katıldı gerektiğinde yürütmek için uzun bir zamana ihtiyaç Katıldı çünkü bu kötü bir methode olacaktır.
Ben sorunuzu yanlış vermedi umuyoruz.
Ben recursive olmadan .. php kullanarak ağaç yapıları üzerinde çalışmak hangi aracılığıyla yöntemi hakkında sizi bilgilendirmek zorunda. Seni çok standart php kütüphanesinden (SPL) ile bilinir düşünüyorum. Eğer sorunuza yineleyicileri kullanabilirsiniz.
http://www.php.net/~helly/php/ext/spl/
Burada SPL için belgeler için bağlantıdır. Burada Mysql bağlantı yukarıdaki örnek için bazı çözümler şunlardır: - basitçe tablodan dizi alınırken ile size prefrence olarak onlara ve ekranda çalışabilirsiniz
Için: - komşuluk Listesi Modeli
Tüm oğul dahil tüm sonuçları gösterecek olan "RecursiveIteratorIterator" kullanabilirsiniz.
If you only want to show the childs. you can use "ParentIterator"