mysql父子结构排序_MySQL
Jun 01, 2016 pm 01:15 PM项目中经常会遇到父子结构显示的问题,不同的数据库有不同的写的方式,比如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 ;
SELECT * FROM category ORDER BY getPriority(ID);
☆ getPriority 这个函数的限制条件是:所有数据追溯上去必须有唯一的祖先。从树结构来看,不能有多棵树。

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

How does Go language implement the addition, deletion, modification and query operations of the database?

Detailed tutorial on establishing a database connection using MySQLi in PHP

How does Hibernate implement polymorphic mapping?

iOS 18 adds a new 'Recovered' album function to retrieve lost or damaged photos

Analysis of the basic principles of MySQL database management system

An in-depth analysis of how HTML reads the database

Tips and practices for handling Chinese garbled characters in databases with PHP

How does Go WebSocket integrate with databases?
