在一个表中订购类别和子类别

时间:2015-01-29 10:54:44

标签: mysql sql categories

我有一个包含三列的类别表。

 categories: id, name, parent_id

如何使用SQL命令在树视图中打印这些类别?

样品:

 Men
      Top
           Shirts
           Tshirts
      Bottom
           Jeans
 Women
      Top
           Jackets
           Tshirts
      Bottom
           Jeans
Accessories
      Belt
      Cap

1 个答案:

答案 0 :(得分:0)

您可能需要使用递归来执行此操作,例如类似于此存储过程...

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”。

e.g。 CALL PrintHierachy('',0)

(之前我没有在MySQL中使用过存储过程,但是如果没有编译的话,请在其他DBMS中使用,请原谅我!)