Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在一个表中订购类别和子类别_Mysql_Sql_Categories - Fatal编程技术网

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

Mysql 在一个表中订购类别和子类别,mysql,sql,categories,Mysql,Sql,Categories,我有一个三列的分类表 categories: id, name, parent_id 如何使用SQL命令在树状图中打印这些类别 样本: Men Top Shirts Tshirts Bottom Jeans Women Top Jackets Tshirts Bottom Jeans Accessories

我有一个三列的分类表

 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

e、 g.调用PrintHierachy,0


我以前没有在MySQL中使用过存储过程,但在其他DBMS中使用过存储过程,所以请原谅我的错误

推荐阅读:,通常情况下,数据显示问题将在表示层中处理。^这将仅按字母顺序排列!如果你想让男人出现在女人和配饰的上方,你可能需要一张桌子或另一列来存储这个订单…我同意上面的评论,像这样的事情应该在展示层完成!!