0
点赞
收藏
分享

微信扫一扫

mysql查询最上级父级id

小编 2023-07-15 阅读 82

MySQL查询最上级父级ID

在数据库中,经常会遇到需要查询最上级父级ID的情况。最上级父级ID是指一个节点或实体的最顶层父级ID,也可以称为根节点ID。在数据库中,通常会使用树状结构数据模型来表示层级关系,例如组织结构、分类体系等。

本文将介绍如何使用MySQL查询最上级父级ID的方法,并提供相应的代码示例。

数据库表结构

假设我们有一个名为categories的数据表,用于存储商品的分类信息。该表结构如下:

CREATE TABLE categories (
  id INT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  parent_id INT,
  FOREIGN KEY (parent_id) REFERENCES categories(id)
);

该表包含以下字段:

  • id:分类ID,主键。
  • name:分类名称。
  • parent_id:上级分类ID,用于表示层级关系。

查询最上级父级ID的方法

为了查询最上级父级ID,我们可以使用递归查询或者使用连接查询。下面将分别介绍这两种方法。

递归查询

递归查询是一种常用的查询树状结构数据的方法。在MySQL中,可以使用WITH RECURSIVE关键字来实现递归查询。

以下是一个使用递归查询的示例代码,用于查询指定分类ID的最上级父级ID:

WITH RECURSIVE category_path (id, parent_id) AS (
  SELECT id, parent_id FROM categories WHERE id = {category_id}
  UNION ALL
  SELECT c.id, c.parent_id FROM categories c JOIN category_path cp ON c.id = cp.parent_id
)
SELECT id, parent_id FROM category_path ORDER BY parent_id LIMIT 1;

在上述代码中,我们首先定义了一个临时表category_path,并从categories表中选择指定分类ID的记录作为初始行。然后使用UNION ALL将每次迭代查询的结果与临时表合并,直到无法再找到上级分类。

连接查询

连接查询是另一种查询树状结构数据的方法。通过多次连接同一张表,可以逐级获取上级分类,直到找到最上级父级ID。

以下是一个使用连接查询的示例代码,用于查询指定分类ID的最上级父级ID:

SELECT c1.id, c1.parent_id
FROM categories c1
LEFT JOIN categories c2 ON c1.parent_id = c2.id
WHERE c2.id IS NULL AND c1.id = {category_id};

在上述代码中,我们通过自连接categories表,将每一级分类与其上一级分类进行连接。通过判断是否存在下一级分类,可以找到最上级父级ID。

示例

假设我们的categories表中有以下数据:

id name parent_id
1 电子产品 NULL
2 手机 1
3 电脑 1
4 家用电器 NULL
5 冰箱 4
6 洗衣机 4
7 书籍 NULL
8 小说 7
9 科技 7

我们可以使用以下代码查询分类ID为2的商品的最上级父级ID:

-- 使用递归查询
WITH RECURSIVE category_path (id, parent_id) AS (
  SELECT id, parent_id FROM categories WHERE id = 2
  UNION ALL
  SELECT c.id, c.parent_id FROM categories c JOIN category_path cp ON c.id = cp.parent_id
)
SELECT id, parent_id FROM category_path ORDER BY parent_id LIMIT 1;

-- 使用连接查询
SELECT c1.id, c1.parent_id
FROM categories c1
LEFT JOIN categories c2 ON c1.parent_id = c2.id
WHERE c2.id IS NULL AND c1.id = 2;

上述代码将返回分类ID为2的商品的最上级父级ID。

以上就是使用MySQL查询最上级父级ID的方法和示例。根据具体

举报

相关推荐

0 条评论