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 38 39
| DROP PROCEDURE IF EXISTS findRoot;
DELIMITER $$
CREATE PROCEDURE findRoot(IN idToSearch INT)
BEGIN
DECLARE my_id INT DEFAULT 0;
DECLARE my_parent INT DEFAULT 0;
DECLARE my_name VARCHAR(45);
DECLARE currentLoop INT DEFAULT 1;
CREATE TEMPORARY TABLE IF NOT EXISTS `temp_table` (
`id` INT(11) NOT NULL,
`name` VARCHAR(45) DEFAULT NULL,
`depth` INT(11) NOT NULL);
TRUNCATE TABLE `temp_table`;
myLoop:LOOP
SET my_id=0;
SELECT `id`,`parent`,`name` INTO my_id,my_parent, my_name FROM `arbre` WHERE `id`=idToSearch;
IF my_id=0 THEN
LEAVE myLoop;
END IF;
INSERT INTO `temp_table` (`id`,`name`,`depth`) VALUES (my_id,my_name,currentLoop);
SET idToSearch=my_parent;
SET currentLoop=currentLoop+1;
END LOOP myLoop;
SELECT `id`,`name` FROM temp_table ORDER BY `depth` ASC;
DROP TEMPORARY TABLE temp_table;
END $$
DELIMITER ;
CALL findRoot(4); |
Partager