Il y a peu de solutions si trouvées car la première est plus compliquée mais donnera de meilleures performances :
Celui-ci concerne l'implémentation d'une structure de données hiérarchique dans MySQLI comme le guide ici
http://mikehillyer.com/articles/managing-hierarchical-data- in-mysql/
Celui qui s'appelle The Nested Set Model.
La deuxième solution que j'ai réellement implémentée par moi-même est l'expansion récursive, celle-ci utilise beaucoup de requêtes mysql et je pense qu'elle peut être améliorée, mais elle est rapide et fonctionne bien. Le truc est d'utiliser pour chaque catégorie une fonction comme celle-ci
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);
}
});
});
};
Il parcourt donc les catégories et les développe de manière récursive.
Peut-être que cela aidera également quelqu'un.