Има няколко решения, ако се намери за това, първото е по-сложно, но ще даде по-добра производителност:
Това е за внедряване на йерархична структура от данни в MySQLI като ръководството тук
http://mikehillyer.com/articles/managing-hierarchical-data- в-mysql/
Този, който се казва Модел на вложен набор.
Второто решение, което всъщност приложих сам, е рекурсивно разширяване, това използва много mysql заявки и вярвам, че може да бъде подобрено, но е бързо и работи добре. Работата е да се използва за всяка категория функция като тази
var expandSubcategories = function (category) {
return new promise(function (resolve, reject) {
category.getSubcategories().then(function (subcategories) {
//if has subcategories expand recursively inner subcategories
if (subcategories && subcategories.length > 0) {
var expandPromises = [];
_.each(subcategories, function (subcategory) {
expandPromises.push(expandSubcategories(subcategory));
});
promise.all(expandPromises).then(function (expandedCategories) {
category.subcategories = [];
_.each(expandedCategories, function (expandedCategory) {
category.subcategories.push(expandedCategory);
}, this);
//return self with expanded inner
resolve(category);
});
} else {
//if has no subcategories return self
resolve(category);
}
});
});
};
Така че преминава през категориите и ги разширява рекурсивно.
Може би и това ще помогне на някого.