@XProx
Кодер

Как создать временную таблицу в рекурсии не вводя в принимаемые значения доп переменную.?

Хранимя процедура работает цеклически и выбирает дерево из подкаталогов базируясь на 1-м главном каталоге.

Задача не писать данные в таблицу tmp__index (постоянная таблица), а на лету генерировать временную таблицу и туда записовать данные , а после окончания работы процедуры удалить таблицу.
dd8deb410d004f2485d072acdb66ff33.PNG

DELIMITER $$
DROP PROCEDURE IF EXISTS `GetAllCats`$$

CREATE PROCEDURE `GetAllCats` (in search_id INT,in zlevel INT)
BEGIN

DECLARE done INT DEFAULT 0;
DECLARE catalog_id INT;
DECLARE catalog_pid INT;
DECLARE catalog_names VARCHAR(255);
DECLARE cur1 CURSOR FOR SELECT * FROM `cats` where `parent`=search_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

IF zlevel<=0 THEN SET max_sp_recursion_depth=10;
ELSE SET max_sp_recursion_depth= zlevel+1; END IF;

OPEN cur1;
WHILE done = 0 DO
FETCH cur1 INTO catalog_id,catalog_names,catalog_pid;
IF NOT done THEN
insert into tmp__index set
id_s=catalog_id,
base=catalog_pid;
call GetAllCats(catalog_id,zlevel-1);
END IF;
END WHILE;
CLOSE cur1;

END$$
DELIMITER ;
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ответы на вопрос 1
Если это веб приложение, то гораздо будет легче вытянуть все категории и обработать их уже на сервере приложения. Нужно просто будет потому же принципу построить дерево из плоского массива, а построенное дерево можно будет закешировать. При обработки в бд возможны различные сюрьпризы от mysql. Если все нужно обрабатывать в бд, то можно глянуть в сторону temporary table.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы