sql >> データベース >  >> RDS >> Mysql

再帰的にSequelizeを含めますか?

    この最初の解決策が見つかった場合、解決策はほとんどありませんが、より複雑ですが、パフォーマンスが向上します:

    これは、MySQLIのガイドのように階層データ構造を実装することについてです

    http://mikehillyer.com/articles/managing-hierarchical-data- in-mysql /

    入れ子集合モデルという名前のモデル。

    私が実際に自分で実装した2番目のソリューションは再帰的拡張です。これは多くの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);
                }
            });
        });
    };
    

    したがって、カテゴリを調べて再帰的に拡張します。

    多分これは誰かにも役立つでしょう。



    1. 配列と多くの更新がある大きなテーブルでPostgreSQLが遅くなる

    2. MySQL- LAST_INSERT_ID()が機能しないのはなぜですか?

    3. fetchSizeを尊重するmysqlJDBCはありますか?

    4. Laravelのmysqlストアドプロシージャから複数の結果セットをフェッチする方法