MySQL 排序依据,然后更新内部联接


MySQL Order by, then Update Inner Join

我有一个表categories其中包含列ID和ParentID 我想添加一个名为Level的字段,该字段说明了每个类别在类别树中的哪个级别。我想我找到了我的解决方案,但它是 sql 而不是 mysql。所以我一直在将其转换为正确的语法。但是,我认为我错过了一步。所以,这是我的代码:

 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;

我认为问题可能在于在我的数据库中类别的顺序不以任何特定的顺序出现,我的意思如下:

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

有什么想法吗?

问题是你有多少个级别?如果它们是 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;