mysql - 如何递归填充子类别?

标签 mysql sql recursive-query

我有一个名为categories 的表。

表结构如下:

DROP TABLE IF EXISTS `categories`;
CREATE TABLE `categories` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) CHARACTER SET utf8 NOT NULL,
  `parent_id` int(11) NOT NULL DEFAULT '-1',
  PRIMARY KEY (`ID`)
);

表格中有3种类型的项目:

  1. 主要类别(其parent_id为-1)
  2. 二级类别(其parent_id是任何主要类别)
  3. 三级类别(其parent_id 是任何二级类别)

这是一些示例数据:


-- 分类记录


INSERT INTO `categories` VALUES ('1', 'A', '-1');
INSERT INTO `categories` VALUES ('2', 'B', '-1');
INSERT INTO `categories` VALUES ('3', 'C', '-1');
INSERT INTO `categories` VALUES ('4', 'a', '1');
INSERT INTO `categories` VALUES ('5', 'b', '2');
INSERT INTO `categories` VALUES ('6', 'c', '3');
INSERT INTO `categories` VALUES ('7', 'aa', '4');
INSERT INTO `categories` VALUES ('8', 'bb', '5');
INSERT INTO `categories` VALUES ('9', 'cc', '6');
INSERT INTO `categories` VALUES ('10', 'ccc', '6');

我想得到如下的输出结构:

Main Category      Second Level Category        Third Level Category
A                           a                           aa
B                           b                           bb
C                           c                           cc
C                           c                           ccc

感谢任何帮助。

最佳答案

你可以试一试:

SELECT 
t1.title AS 'Main Category',
t2.title AS 'Second Level Category',
t3.title AS 'Third Level Category'
FROM categories AS t1
INNER JOIN categories AS t2 ON t2.parent_id = t1.ID
INNER JOIN categories AS t3 ON t3.parent_id = t2.ID;

您将获得如下输出结构:

Main Category      Second Level Category        Third Level Category
A                           a                           aa
B                           b                           bb
C                           c                           cc
C                           c                           ccc

Reference

关于mysql - 如何递归填充子类别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37096744/

相关文章:

sql - 从具有自动增量列的表中复制数据

php - 如何从 MySql 的表单中转换日期

java - 关于使用 Ebean 的 Play Framework 和 MySQL 的简单 CRUD 教程?

mysql - 依赖于多个表的可更新 View

mysql - 删除多对多关系中的正确内容

SQL 查询以获取主管层次结构的列表。员工 --> 主管 --> 主管

php - MySQL递归树搜索

sql - 递归 SQL 查询查找所有匹配的标识符

php - 修复错误 : mysql_num_rows(): supplied argument is not a valid MySQL result resource

mysql - 将 VARCHAR 转换为 DATETIME 时为 NULL