Как присвоить к элементу в бд связь с многими родителями?
у меня есть база данных, которая по запросу через хранимую процедуру рекрусии которая выдает цепочку связанных элементов.
Как сделать так, что бы родитель у листика мог быть не только 'Зелёный' а еще и 'Дерево'
То есть, выглядит так Цвет-Зелёный-Листик а след строка, которая показывает другую связь
Дерево-листик.
Сейчас все элементы взаимосвязаны, то есть я не могу к дереву добавить листик, без повторного ввода элемента в бд.
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;
И как можно выдавать только окончательный результат, Не как на фото Цвет - Цвет Цвет - Зелёный
Источник: Stack Overflow на русском