Как присвоить к элементу в бд связь с многими родителями?

Рейтинг: 0Ответов: 0Опубликовано: 23.01.2023

у меня есть база данных, которая по запросу через хранимую процедуру рекрусии которая выдает цепочку связанных элементов. Как сделать так, что бы родитель у листика мог быть не только 'Зелёный' а еще и 'Дерево' То есть, выглядит так Цвет-Зелёный-Листик а след строка, которая показывает другую связь
Дерево-листик. Сейчас все элементы взаимосвязаны, то есть я не могу к дереву добавить листик, без повторного ввода элемента в бд.

DROP PROCEDURE IF EXISTS getpath;
DELIMITER $$
CREATE PROCEDURE getpath(IN cat_id INT, OUT path TEXT)
BEGIN
    DECLARE catname VARCHAR(20);
    DECLARE temppath TEXT;
    DECLARE tempparent INT;
    SET max_sp_recursion_depth = 255;
    SELECT name, parent_id FROM category WHERE id=cat_id INTO catname, tempparent;
    IF tempparent IS NULL
    THEN
        SET path = catname;
    ELSE
        CALL getpath(tempparent, temppath);
        SET path = CONCAT(temppath, '/', catname);
    END IF;
END$$
DELIMITER ;
DROP FUNCTION IF EXISTS getpath;
DELIMITER $$
CREATE FUNCTION getpath(cat_id INT) RETURNS TEXT DETERMINISTIC
BEGIN
    DECLARE res TEXT;
    CALL getpath(cat_id, res);
    RETURN res;
END$$
DELIMITER ;
DROP TABLE IF EXISTS category;
CREATE TABLE category (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20),
    parent_id INT,
    CONSTRAINT fk_category_parent FOREIGN KEY (parent_id)
    REFERENCES category (id)
) engine=innodb;INSERT INTO category VALUES
(19, 'category1', NULL),
(20, 'category2', 19),
(21, 'category3', 20),
(22, 'category4', 21),
(23, 'categoryA', 19),
(24, 'categoryB', 23),
(25, 'categoryC', 23),
(26, 'categoryD', 24);

Это mysql 1) хранимая процедура 2)функция оболочка хр. процедуры и 3)Создание таблицы

и запрос на вывод связанных эллементов

SELECT id, name, getpath(id) AS path FROM category;

И как можно выдавать только окончательный результат, Не как на фото Цвет - Цвет Цвет - Зелёный

а сразу Цвет - Зелёный - Листик. (см. прикреплённое фото) введите сюда описание изображения

Ответы

Ответов пока нет.