将类别和子类别合二为一 table
Order categories and subcategories in one table
我有一个包含三列的类别 table。
categories: id, name, parent_id
如何使用 SQL 命令在树视图中打印这些类别?
样本:
Men
Top
Shirts
Tshirts
Bottom
Jeans
Women
Top
Jackets
Tshirts
Bottom
Jeans
Accessories
Belt
Cap
您可能需要使用递归来执行此操作,例如像这个存储过程...
DELIMITER //
CREATE PROCEDURE PrintHierachy
(IN parentId DECIMAL(19, 0), IN indent VARCHAR(1000))
BEGIN
DECLARE itemName VARCHAR(255);
DECLARE childId DECIMAL(19, 0);
DECLARE csr CURSOR FOR
SELECT id
FROM MY_TABLE
WHERE parentId = parentId
ORDER BY NAME;
IF parentId > 0 THEN
SELECT itemName INTO FROM MY_TABLE WHERE id=parentId;
% Print it
SELECT concat(indent, itemName);
END IF;
OPEN csr;
child_loop: LOOP
FETCH csr INTO childId;
IF done THEN
LEAVE child_loop;
END IF;
% Recurse
CALL PrintHierachy(concat(' '), childId);
END LOOP;
CLOSE csr;
END;
这假定顶层的父 ID 为“0”。
例如CALL PrintHierachy('', 0)
(我以前没有在 MySQL 中使用过存储过程,但在其他 DBMS 中使用过,如果编译不通过请见谅!)
我有一个包含三列的类别 table。
categories: id, name, parent_id
如何使用 SQL 命令在树视图中打印这些类别?
样本:
Men
Top
Shirts
Tshirts
Bottom
Jeans
Women
Top
Jackets
Tshirts
Bottom
Jeans
Accessories
Belt
Cap
您可能需要使用递归来执行此操作,例如像这个存储过程...
DELIMITER //
CREATE PROCEDURE PrintHierachy
(IN parentId DECIMAL(19, 0), IN indent VARCHAR(1000))
BEGIN
DECLARE itemName VARCHAR(255);
DECLARE childId DECIMAL(19, 0);
DECLARE csr CURSOR FOR
SELECT id
FROM MY_TABLE
WHERE parentId = parentId
ORDER BY NAME;
IF parentId > 0 THEN
SELECT itemName INTO FROM MY_TABLE WHERE id=parentId;
% Print it
SELECT concat(indent, itemName);
END IF;
OPEN csr;
child_loop: LOOP
FETCH csr INTO childId;
IF done THEN
LEAVE child_loop;
END IF;
% Recurse
CALL PrintHierachy(concat(' '), childId);
END LOOP;
CLOSE csr;
END;
这假定顶层的父 ID 为“0”。
例如CALL PrintHierachy('', 0)
(我以前没有在 MySQL 中使用过存储过程,但在其他 DBMS 中使用过,如果编译不通过请见谅!)