项目中常常会遇到父子结构显示的问题,不同的数据库有不同的写的方式,比方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

mysql 父子排序_mysql 父子结构排序相关推荐

  1. mysql自动排序_MySQL中的排序

    文章正文: 在编写SQL 语句时常常会用到 order by 进行排序,那么排序过程是什么样的?为什么有些排序执行比较快,有些排序执行很慢?又该如何去优化? 索引排序 索引排序指的是在通过索引查询时就 ...

  2. mysql 父子结构排序_mysql 父子结构排序 | 学步园

    项目中经常会遇到父子结构显示的问题,不同的数据库有不同的写的方式,比如SqlServer中用with union 实现,而Mysql则没有这么方便的语句. 如下category表,食品有pizaa,b ...

  3. mysql 回退查询_MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题...

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

  4. mysql默认字符集和排序_MySQL字符集和排序规则

    MySQL在创建数据库是,需要设置数据库的字符集和排序规则,如图所示: 我觉得这里有必要解释下字符集和排序规则这两个概念. 字符集 说到字符集,需要先提下字符.字符集和字符编码这几个词的含义. 字符( ...

  5. mysql教程排序_MySQL中的排序函数field()实例详解

    前言 我们在日常开发过程中,排序是经常用到的,有时候有这样的需求. 比如,需要在查询结果中根据某个字段的具体值来排序.如下面例子 上面是一张个人信息 表,假如我们想按照'seiki','iris',' ...

  6. mysql 拼音排序_MySQL按常规排序、自定义排序和按中文拼音字母排序的方法

    MySQL常规排序.自定义排序和按中文拼音字母排序,在实际的SQL编写时,我们有时候需要对条件集合进行排序. 下面给出3种比较常用的排序方式,mark一下 1.常规排序ASC DESC ASC 正序 ...

  7. mysql按中文拼音字母排序_MySQL按常规排序、自定义排序和按中文拼音字母排序的方法...

    MySQL常规排序.自定义排序和按中文拼音字母排序,在实际的SQL编写时,我们有时候需要对条件集合进行排序. 下面给出3种比较常用的排序方式,mark一下 1.常规排序ASC DESC ASC 正序 ...

  8. mysql 按相似度排序_mysql 单表排序,相同值排序

    --学校类型数据 SELECT t.examid,'-' AS unitcode,t.schooltype,'-' ASclassname,t.bkrs,t.skrs,t.avgs,SUM(IF(t. ...

  9. mysql树形遍历_mysql树形结构遍历

    课题:如何利用mysql遍历树形结构(获取一个节点的所有子节点/父节点) 方案:自定义mysql函数 树形表结构: CREATE TABLE `tbl_tree` ( `id` bigint(20) ...

  10. mysql 叶子节点_MySQL 树形结构 根据指定节点获取其所有叶子节点

    背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有叶子节点. 叶子节点:如果一个节点下不再有子节点,则为叶子节点. 问题分析 1.可以使用类似Java这种面向对象的语言,对节点集合 ...

最新文章

  1. linux mint输入法托盘,linux mint12安装ibus之后,语言栏不跟随光标和系统托盘输入法图标不能显示问题解决...
  2. 探索 MongoDB--转
  3. linux ssh 时间设置,Linux下设置SSH Server设置时间链接限制(示例代码)
  4. 免费在线生成工具大全
  5. bp matlab 训练参数,基于MATLABBP神经网络设计与训练.PDF
  6. IDEA+Java:Selenium+Maven+TestNG基本WebUI自动化测试环境搭建
  7. FloatingActionButton FAB 悬浮按钮
  8. 数中唯一只出现一次的数字
  9. python图片分析中央气象台降水_02_中央气象台
  10. 关于苹果ID用哪些邮箱注册比较好安全?
  11. mac上开启隐藏文件
  12. J9数字平台科普:Web3支柱:去中心化存储全面解析
  13. 首次使用阿帕奇下的ab测压工具测试程序
  14. 刀片服务器型号规格,刀片服务器是什么,刀片服务器规格统一好不好
  15. win10系统双屏显示
  16. spoolsv病毒的清除
  17. IDEA MAVEN 项目 打包文件到指定目录
  18. React-Native搭建Android平台(ZUCC智能终端与移动应用开发lab1)
  19. c++ vector 一部分_巴博斯制定奔驰C级(W204)全套改装方案,运动范er十足
  20. 华为电脑用鸿蒙系统了吗,华为的鸿蒙系统可以用在电脑上吗?

热门文章

  1. XXL分布式任务调度平台
  2. 标题:史丰收速算 史丰收速算法的革命性贡献是:从高位算起,预测进位。不需要九九表,彻底颠覆了传统手算! 速算的核心基础是:1位数乘以多位数的乘法。 其中,乘以7是最复杂
  3. Django06 后台管理
  4. win7系统备份方法
  5. 台式计算机入门基础知识,电脑基础知识:新手入门最全电脑知识干货
  6. 【离散数学】平凡子群
  7. java print快捷键_请问eclipse中输出的快捷键是什么?
  8. RxJava模式与原理-----标准观察者与RxJava观察者
  9. 【TensorFlow】LSTM(基于PTB的自然语言建模)
  10. Elastic基本概念