首页 > 解决方案 > 如何获取所有父母ID

问题描述

我有一个 MySQL 表,其中包含一个类别列表。

    
    category_id         name                parent_id
    --------------------------------------------------
    1                    beverage           NULL
    2                    Water              1
    3                    Sparkling Water    2
    4                    Snacks             NULL
    5                    Chips              4
    
    
    product_id      name            category_id
    -------------------------------------
    1               water001        3   
    2               Chips001        5   
    

如何通过一个查询获得类别路径?

SELECT name as product_name,category_path FROM product_table
    
    product_name    category_path
    -------------------------------------
    water001        3,2,1
    Chips001        5,4
    

标签: mysqlhierarchical-data

解决方案


我认为你需要一个存储过程。我不认为你可以用一个单一的 SQL 语句来做到这一点。

我不熟悉编写 SQL 过程,但这样的 somtehintg 可能会有所帮助:

CREATE FUNCTION GetPath(startingID INT)
@outputVal VARCHAR(20) OUTPUT 

  BEGIN
  DECLARE x INT;

  SELECT category_id INTO x FROM table2 Where product_id = startingID;
  SET outputVal = x;

  sloop:LOOP
      SELECT category_id INTO x FROM table1 WHERE parent_id = x;
      IF x IS NOT NULL THEN
          SET outputVal = outputVal + "," + x;
          ITERATE sloop;
      ELSE
          LEAVE sloop;
      END IF;  
  END LOOP;
  RETURN outputVal;
END $$

请检查正确的拼写!!!

要获得结果,您需要以下内容:

选择获取路径(123);

但要小心:这个解决方案可能会以一个不结束的循环结束,当过程永远找不到“NULL”时!

希望我有帮助!


推荐阅读