Mysql
 sql >> Base de données >  >> RDS >> Mysql

Inclure récursif Sequelize ?

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.