zoukankan      html  css  js  c++  java
  • mysql 父子结构排序

    项目中常常会遇到父子结构显示的问题,不同的数据库有不同的写的方式,比方SqlServer中用with union 实现。而Mysql则没有这么方便的语句。

    例如以下category表。食品有pizaa,buger,coffee。而pizza又分了加cheese几种,怎样将他们的父子结构表现出来呢?

    CREATE TABLE category(
        id INT(10),
        parent_id INT(10),
        name VARCHAR(50)
    );
    
    INSERT INTO category (id, parent_id, name) VALUES
    (1, 0, 'pizza'),        --node 1
    (2, 0, 'burger'),       --node 2
    (3, 0, 'coffee'),       --node 3
    (4, 1, 'piperoni'),     --node 1.1
    (5, 1, 'cheese'),       --node 1.2
    (6, 1, 'vegetariana'),  --node 1.3
    (7, 5, 'extra cheese'); --node 1.2.1

    stackoverflow上一个人给了一个非常好的解决方式:

    1. 创建一个函数

    delimiter ~
    DROP FUNCTION getPriority~
    
    CREATE FUNCTION getPriority (inID INT) RETURNS VARCHAR(255) DETERMINISTIC
    begin
      DECLARE gParentID INT DEFAULT 0;
      DECLARE gPriority VARCHAR(255) DEFAULT '';
      SET gPriority = inID;
      SELECT parent_id INTO gParentID FROM category WHERE ID = inID;
      WHILE gParentID > 0 DO  /*0为根*/
        SET gPriority = CONCAT(gParentID, '.', gPriority);
        SELECT parent_id INTO gParentID FROM category WHERE ID = gParentID;
      END WHILE;
      RETURN gPriority;
    end~
    
    delimiter ;

    2. 调用函数得到的便是排完序的结果

    SELECT * FROM category ORDER BY getPriority(ID);
    

    ☆ getPriority 这个函数的限制条件是:全部数据追溯上去必须有唯一的祖先。从树结构来看。不能有多棵树。


    来源:http://stackoverflow.com/questions/14890204/order-sql-tree-hierarchy


  • 相关阅读:
    PHP 布尔类型
    php连接到数据库
    php_2
    php_1
    iOS开发之APP导入添加自定义字体
    iOS开发之判断横竖屏
    iOS开发之iPhone手机屏幕尺寸整理
    iOS开发之关闭暗黑模式
    iOS开发之iOS13推送deviceToken处理
    iOS开发之UIView和CALayer的区别
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5137133.html
Copyright © 2011-2022 走看看