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

ツリートラバーサルアルゴリズムに基づいて、この結果セットからツリービューを生成するにはどうすればよいですか?

    ネストされたツリーモデルを構築するときは、lftで重複を作成しないでください およびrgt 。実際、それらを一意であると宣言する必要があります。

    データモデルでは、カテゴリ1のセット および8 オーバーラップ。言ってやるが、1 14へ アイテム1の両方に使用されます および8

    それらを次の値に置き換えます:

    INSERT INTO `categories` VALUES(1, NULL, NULL, 'Fruits', 1, 14);
    INSERT INTO `categories` VALUES(2, 1, 1, 'Apple', 2, 3);
    INSERT INTO `categories` VALUES(3, 1, 1, 'Orange', 4, 9);
    INSERT INTO `categories` VALUES(4, 3, 1, 'Orange Type 1', 5, 6);
    INSERT INTO `categories` VALUES(5, 3, 1, 'Orange Type 2', 7, 8);
    INSERT INTO `categories` VALUES(6, 1, 1, 'Pear', 10, 11);
    INSERT INTO `categories` VALUES(7, 1, 1, 'Banana', 12, 13);
    INSERT INTO `categories` VALUES(8, NULL, NULL, 'Eletronics', 15, 29);
    INSERT INTO `categories` VALUES(9, 8, 8, 'Cell Phones', 16, 17);
    INSERT INTO `categories` VALUES(10, 8, 8, 'Computers', 19, 24);
    INSERT INTO `categories` VALUES(11, 10, 8, 'PC', 20, 21);
    INSERT INTO `categories` VALUES(12, 10, 8, 'MAC', 22, 23);
    INSERT INTO `categories` VALUES(13, 8, 8, 'Printers', 25, 26);
    INSERT INTO `categories` VALUES(14, 8, 8, 'Cameras', 27, 28);
    

    これで、root_idで注文する必要はありません。 。

    最初から名前順にノードを挿入しない限り、簡単な方法はありません。 nameが大きい兄弟 lftを大きくする必要があります およびrgt

    INSERT INTO `categories` VALUES(1, NULL, NULL, 'Fruits', 1, 14);
    INSERT INTO `categories` VALUES(2, 1, 1, 'Apple', 2, 3);
    INSERT INTO `categories` VALUES(7, 1, 1, 'Banana', 4, 5);
    INSERT INTO `categories` VALUES(3, 1, 1, 'Orange', 6, 11);
    INSERT INTO `categories` VALUES(4, 3, 1, 'Orange Type 1', 7, 8);
    INSERT INTO `categories` VALUES(5, 3, 1, 'Orange Type 2', 9, 10);
    INSERT INTO `categories` VALUES(6, 1, 1, 'Pear', 12, 13);
    

    ネストされたツリーは、暗黙的な順序を1つだけ持つことができます。

    MySQLで隣接リストをクエリする方法もあります :

    ただし、id以外で注文する場合は、追加の一意の注文列を作成する必要があります 。

    この記事も読むことをお勧めします:

    これは、入れ子集合をより効率的に保存および照会する方法を示しています。



    1. JDBCを使用してMySQLサーバーにpingを実行する

    2. 失敗したRails移行のロールバック

    3. データベース接続の確立に失敗した背後にある根本的なエラーは何ですか。接続文字列、ユーザー名、パスワードを確認してください。

    4. MicrosoftAccessの進化と未来