n
個のカテゴリ数とそのサブカテゴリを持つデータベースを作成しようとしています。MySQL/PHPでネストされた順序セットを実装する
まず、私はその後、
をこの
+-------------+----------------------+--------+
| category_id | name | parent |
+-------------+----------------------+--------+
| 1 | Electronics | NULL |
| 2 | Mobile | 1 |
| 3 | Washing Machine | 1 |
| 4 | Samsung | 2 |
+-------------+----------------------+--------+
などの隣接モデルデータベースを作成しようとしましたが、ノードを削除するとき、私は問題に直面していた、削除されたノードの子ノードを管理する方法のようになど
:私は、各図中 Joe Celko![sample_structure](https://i.stack.imgur.com/EdbKr.png)
表構造により、ネストされた注文の設定を実装しようとしています
Figure 1:
+----+-------------+-----+-----+
| id | name | lft | rgt |
+----+-------------+-----+-----+
| 1 | Electronics | 1 | 2 |
+----+-------------+-----+-----+
Figure 2:
+----+-------------+-----+-----+
| id | name | lft | rgt |
+----+-------------+-----+-----+
| 1 | Electronics | 1 | 4 |
+----+-------------+-----+-----+
| 2 | Mobile | 2 | 3 |
+----+-------------+-----+-----+
Figure 3:
+----+-----------------+-----+-----+
| id | name | lft | rgt |
+----+-----------------+-----+-----+
| 1 | Electronics | 1 | 6 |
+----+-----------------+-----+-----+
| 2 | Mobile | 2 | 3 |
+----+-----------------+-----+-----+
| 3 | Washing Machine | 4 | 5 |
+----+-----------------+-----+-----+
Figure 4:
+----+-----------------+-----+-----+
| id | name | lft | rgt |
+----+-----------------+-----+-----+
| 1 | Electronics | 1 | 8 |
+----+-----------------+-----+-----+
| 2 | Mobile | 2 | 5 |
+----+-----------------+-----+-----+
| 3 | Washing Machine | 6 | 7 |
+----+-----------------+-----+-----+
| 4 | Samsung | 3 | 4 |
+----+-----------------+-----+-----+
ですが、正しいノード番号rgt
とlft
を挿入することができません。 私はこれを使用していますが、正しい値はrgt
とlft
ではありません。
LOCK TABLE nested_category WRITE;
SELECT @myRight := rgt FROM nested_category
WHERE name = 'Mobile';
UPDATE nested_category SET rgt = rgt + 2 WHERE rgt > @myRight;
UPDATE nested_category SET lft = lft + 2 WHERE lft > @myRight;
INSERT INTO nested_category(name, lft, rgt) VALUES('LG', @myRight + 1, @myRight + 2);
UNLOCK TABLES;
どのように子ノードを管理したいですか?彼らは祖父母の子になるか、単に親と一緒に削除されますか? –
祖父母の子供になる – jpm
誤ってルートノードが削除される場合はどうなりますか? –