Essayez cette procédure stockée
CREATE PROCEDURE updatePath(in itemId int)
BEGIN
DECLARE cnt int default 0;
CREATE temporary table tmpTable
(
`id` int, `name` varchar(15), `parent` int, path varchar(500)
)engine=memory select id, name, parent, name AS 'Path' from tbl where id = itemId;
select parent into cnt from tmpTable;
while cnt <> 0 do
Update tmpTable tt, tbl t set tt.parent = t.parent,
tt.path = concat(t.name, ' > ', tt.path)
WHERE tt.parent = t.id;
select parent into cnt from tmpTable;
end while;
select * from tmpTable;
drop table tmpTable;
END//
Requête 1 :
call updatePath(10)
SQL FIDDLE :
| ID | NAME | PARENT | PATH |
----------------------------------------------------------------------------------------------
| 10 | "Smear em meat" | 0 | "Kitchenware" > "Knives" > "Meat Knives" > "Smear em meat" |
J'espère que cela vous aidera