Как получить все родительские идентификаторы - PullRequest
0 голосов
/ 07 января 2019

У меня в 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
    

1 Ответ

0 голосов
/ 07 января 2019

Я думаю, вам нужна хранимая процедура. Я не думаю, что вы можете сделать это с помощью одного 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 $$

Пожалуйста, проверьте правильность написания !!!

Чтобы получить результаты, вам нужно что-то вроде:

SELECT GetPath (123);

Но будьте осторожны: это решение может заканчиваться бесконечным циклом, когда процедура никогда не находит «NULL»!

Надеюсь, я помог!

...