MySQL按顺序排序,然后更新内部加入

时间:2013-10-03 16:48:30

标签: php mysql sql

我有一张表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

有什么想法吗?

1 个答案:

答案 0 :(得分: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;