首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从嵌套类别表中获取顶级父级?

如何从嵌套类别表中获取顶级父级?
EN

Stack Overflow用户
提问于 2011-11-30 10:43:51
回答 1查看 2.9K关注 0票数 4

我正在尝试从分类表中获取最高级的父类id:

代码语言:javascript
复制
+-------------+----------------------+--------+
| category_id | name                 | parent |
+-------------+----------------------+--------+
|           1 | ELECTRONICS          |   NULL |
|           2 | TELEVISIONS          |      1 |
|           3 | TUBE                 |      2 |
|           4 | LCD                  |      2 |
|           5 | PLASMA               |      2 |
|           6 | PORTABLE ELECTRONICS |      1 |
|           7 | MP3 PLAYERS          |      6 |
|           8 | FLASH                |      7 |
|           9 | CD PLAYERS           |      6 |
|          10 | 2 WAY RADIOS         |      6 |
+-------------+----------------------+--------+

可以有很多子类别,我的问题是,如何获得任何子类别的最高家长?

例如,在数据库子类别节点中,可以如下所示:

parent>>subcategory>>subsubcategory>>subsubsubcategory

另一个节点可以如下所示:

parent>>subcategory

因此,如果我使用id=6查询子类别的顶级父级,就会得到电子产品等等。

如何使用mysql获取顶级父级id?我希望这是完全可以理解的。

EN

回答 1

Stack Overflow用户

发布于 2011-12-08 13:07:02

您必须编写一个循环查询的存储函数:

查询查找父

代码语言:javascript
复制
SELECT parent FROM cat WHERE category_id = 6

存储函数以查找顶级父级

代码语言:javascript
复制
DELIMITER $$

CREATE FUNCTION top_parent(PCat INTEGER) RETURNS INTEGER
BEGIN
  DECLARE MyParent INTEGER;
  DECLARE PrevParent INTEGER;
  SET PrevParent = PCat;
  REPEAT
    SELECT parent INTO MyParent FROM cat WHERE category_id = PrevParent;
    IF NOT(MyParent IS NULL) THEN
      SET PrevParent = MyParent;
    END IF;
  UNTIL (MyParent IS NULL) 
  END REPEAT;
  RETURN PrevParent;
END $$

DELIMITER ;

如何在查询中使用该函数

代码语言:javascript
复制
SELECT name FROM cat WHERE category_id = top_parent(6)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8324631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档