Хорошо, поэтому я был после этого ответа здесь И я пытаюсь запустить эту процедуру в PhpMyAdmin:
begin
declare v_done tinyint unsigned default 0;
declare v_depth smallint unsigned default 0;
create temporary table hier(
parent_cat_id smallint unsigned,
cat_id smallint unsigned,
depth smallint unsigned default 0
)engine = memory;
insert into hier select parent_cat_id, cat_id, v_depth from categories where cat_id = p_cat_id;
/* http://dev.mysql.com/doc/refman/5.0/en/temporary-table-problems.html */
create temporary table tmp engine=memory select * from hier;
while not v_done do
if exists( select 1 from categories p inner join hier on p.parent_cat_id = hier.cat_id and hier.depth = v_depth) then
insert into hier
select p.parent_cat_id, p.cat_id, v_depth + 1 from categories p
inner join tmp on p.parent_cat_id = tmp.cat_id and tmp.depth = v_depth;
set v_depth = v_depth + 1;
truncate table tmp;
insert into tmp select * from hier where depth = v_depth;
else
set v_done = 1;
end if;
end while;
select
p.cat_id,
p.name as category_name,
b.cat_id as parent_cat_id,
b.name as parent_category_name,
hier.depth
FROM hier
INNER JOIN categories p ON hier.cat_id = p.cat_id
LEFT OUTER JOIN categories b ON hier.parent_cat_id = b.cat_id
ORDER BY hier.depth, hier.cat_id;
drop temporary table if exists hier;
drop temporary table if exists tmp;
end
И эта процедура работает, я запустил ее, используя следующий SQL:
call category_hier(1);
И я получаю желаемый результат.
Однако, когда я запускаю его снова, я все равно получаю тот же результат, только теперь PhpMyAdmin поднимает кучуошибки, начиная с ORDER BY:
Теперь этот список ошибок продолжается долго, и я думаю, что в основном это ошибки в PHPMyAdmin, но почемуэто происходит?Это должно быть что-то в SQL, хотя я могу найти там только один заказ, и это выглядит хорошо для меня.
Кажется, что если я открою процедуру и сохраню ее снова, а затем вызову процедуру, ошибки не будет.Но во второй раз процедура запускается и все остальные разы после того, как я получаю сообщение об ошибке.
Любой совет?