我在 phpmyadmin 中有一个名为 categories 的表,其中包含 ID、ParentID、Name、NestLevel 列。
目前,除了 Nest 级别之外,我的所有级别都已填充。我想找出每个类别在树中的哪个级别。
因此,经过一番谷歌搜索,我找到了以下文章:
但是,这是针对 sql server 的,而不是针对 mysql 的。有问题的片段如下:
-- Step #1: Add [Level] Column to the Table
ALTER TABLE [dbo].[Hierarchy] ADD [Level] INT NULL
GO
-- Step #2: Set Level = 1 For Rows With No Parents
UPDATE [dbo].[Hierarchy]
SET [Level] = 1
WHERE [ParentID] IS NULL
GO
-- Step #3: Set the Level of all Remaining Rows
WHILE (SELECT COUNT(*) FROM [dbo].[Hierarchy] WHERE [Level] IS NULL) > 0
BEGIN
UPDATE A
SET [Level] = B.[Level] + 1
FROM [dbo].[Hierarchy] A INNER JOIN [dbo].[Hierarchy] B
ON A.[ParentID] = B.[ID]
WHERE A.[Level] IS NULL AND
B.[Level] IS NOT NULL
END
GO
因此,首先我删除了所有 [] 和 GO、END、BEGIN 的所有实例,并将 [dbo].[hierarchy] 的所有实例替换为categories
.
所以现在,第 1 步和第 2 步完美运行。但是,第 3 步是给我错误并且不知道原因的那个。
我最终也将通过一个 php 脚本调用这一切(如果这对答案有任何影响):
$sql = "query";
database_queryModify($sql,$result);
有人知道这个问题吗?
谢谢约翰
编辑:我得到的错误是:
You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near
'WHILE SELECT COUNT(*) FROM categories WHERE Level IS NULL > 0 UPDATE A '
at line 1