将类别和子类别合二为一 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 中使用过,如果编译不通过请见谅!)