Home >Database >Mysql Tutorial >mysql父子结构排序_MySQL

mysql父子结构排序_MySQL

WBOY
WBOYOriginal
2016-06-01 13:15:511079browse

项目中经常会遇到父子结构显示的问题,不同的数据库有不同的写的方式,比如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) DETERMINISTICbegin  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 这个函数的限制条件是:所有数据追溯上去必须有唯一的祖先。从树结构来看,不能有多棵树。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn