热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql父子结构排序【MySQL】

数据库|mysql教程category,cheese,数据库,pizza,m数据库-mysql教程项目中经常会遇到父子结构显示的问题,不同的数据库有不同的写的方式,比如SqlSer

数据库|mysql教程mysql父子结构排序【MySQL】
category,cheese,数据库,pizza,m
数据库-mysql教程
项目中经常会遇到父子结构显示的问题,不同的数据库有不同的写的方式,比如SqlServer中用with union 实现,而Mysql则没有这么方便的语句。
thinksns手机端源码,ubuntu系统的引导,swoole协程爬虫,php outexcel,seo仔 粤语lzw
如下category表,食品有pizaa,buger,coffee,而pizza又分了加cheese几种,如何将他们的父子结构表现出来呢?
古风网站源码下载,ubuntu开机选择grub,爬虫在吗 分析网页,php 教育,seo业务平台lzw

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上一个人给了一个很好的解决方案:

静观其变源码,ubuntu 账号是什么,tomcat7做服务,数据爬虫程序,拉丁维文转换php,外贸seo推广公司seo博客lzw
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 这个函数的限制条件是:所有数据追溯上去必须有唯一的祖先。从树结构来看,不能有多棵树。


推荐阅读
author-avatar
寺儿沟小晨晨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有