Istnieje kilka rozwiązań, jeśli znalezione dla tego pierwsze jest bardziej skomplikowane, ale zapewni lepszą wydajność:
Ten dotyczy implementacji hierarchicznej struktury danych w MySQLI jak w przewodniku tutaj
http://mikehillyer.com/articles/managing-hierarchical-data- w-mysql/
Ten, który nosi nazwę Model zestawu zagnieżdżonego.
Drugie rozwiązanie, które faktycznie zaimplementowałem, to rozwijanie rekurencyjne, to wykorzystuje wiele żądań mysql i wierzę, że można je ulepszyć, ale jest szybkie i działa dobrze. Chodzi o to, aby użyć dla każdej funkcji kategorii takiej jak ta
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);
}
});
});
};
Więc przechodzi przez kategorie i rozwija je rekursywnie.
Może to też komuś pomoże.