Есть дерево типа “Adjacency list”(id=>parent_id). Нужно получить URL по ID объекта.
Пример функции для UMI CMS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
DELIMITER $$ DROP FUNCTION IF EXISTS `_YOUR_DATABASE_`.`GetURLPath` $$ CREATE FUNCTION `_YOUR_DATABASE_`.`GetURLPath` (GivenID INT) RETURNS VARCHAR(1024) DETERMINISTIC BEGIN DECLARE rv VARCHAR(1024); DECLARE urlPath VARCHAR(1024); DECLARE thisSlug VARCHAR(120); DECLARE cm CHAR(1); DECLARE ch INT; SET rv = ''; SET urlPath = (select alt_name from cms3_hierarchy where cms3_hierarchy.id = GivenID); SET cm = ''; SET ch = GivenID; SET thisSlug = ''; WHILE ch > 0 DO SELECT IF(rel_id IS NULL,-1, rel_id),(select alt_name from cms3_hierarchy where cms3_hierarchy.id = rel_id) INTO ch, thisSlug FROM ( SELECT rel_id as 'rel_id' FROM cms3_hierarchy_relations WHERE child_id = ch ORDER BY rel_id DESC LIMIT 1 ) A; IF ch > 0 THEN SET rv = CONCAT(rv,cm,ch); SET urlPath = CONCAT('/', thisSlug, '/', urlPath); SET cm = ','; END IF; END WHILE; RETURN urlPath; END $$ DELIMITER ; SELECT GetURLPath(23); |
Функцию лекго изменить, если нужно получить список ID например или если нужно ходить только по одной таблице.