4

列 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

何か案は?

4

1 に答える 1

0

問題は、あなたはいくつのレベルを持っていますか? それらが3レベルの場合、このようにすることができます

ALTER TABLE categories DROP Level;
ALTER TABLE categories ADD Level INT NULL;

UPDATE categories SET Level = 0 WHERE ParentID IS NULL;
UPDATE categories SET level = 1 where parentID = 2; 
UPDATE categories SET level = 2 where parentID > 2;
于 2013-10-03T17:27:54.587 に答える