列 ID と ParentID を含むテーブルcategories
があります。各カテゴリがカテゴリ ツリーのどのレベルにあるかを示す Level というフィールドを追加したいと考えています。私は自分の解決策を見つけたと思いますが、それはmysqlではなくsqlにあります。だから私はそれを正しい構文に変換しています。しかし、私は一歩が欠けていると思います。だから、ここに私のコードがあります:
ALTER TABLE categories DROP Level;
ALTER TABLE categories ADD Level INT NULL;
UPDATE categories
SET Level = 0
WHERE ParentID IS NULL;
UPDATE categories AS A
INNER JOIN categories B ON A.ParentID = B.ID
SET A.Level = B.Level + 1
WHERE A.Level IS NULL AND
B.Level IS NOT NULL;
問題は、私の DB では、カテゴリの順序が特定の順序になっていないことにあると思います。つまり、次のようになります。
ID ParentID
2 NULL 0
4 55
7 2
.....more categories
55 2
だから私がやりたいことは次のとおりです:
ID Parent Level
2 NULL 0
3 55 2
7 2 1
....
55 2 1
しかし、間違っているかもしれませんが、最後の操作を行う前にまずParentIDで注文する必要があるか、クエリの形式が間違っていると思います。
ただし、エラーは発生していませんが、期待している結果が得られないだけです。
ID Parent Level
2 NULL 0
3 55 NULL
7 2 1
....
55 2 1
何か案は?