好的,我当时是following this answer here,并且我试图在PhpMyAdmin中运行以下过程:
4500 * 15 / 100 = 675
此例程有效,我使用以下SQL运行它:
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
然后我得到了想要的结果。
但是,当我再次运行它时,直到PhpMyAdmin出现了一系列错误(从ORDER BY开始),我仍然得到相同的结果:
现在,错误列表持续了很长时间,我认为在PHPMyAdmin中主要是错误,但是为什么会这样呢?尽管我只能在其中找到一个顺序,但它在SQL中一定有用,对我来说似乎还可以。
似乎是,如果我打开该过程,然后再次保存它,然后调用该过程,则错误不存在。但是第二次运行该程序,而在我收到错误后,所有其他时间都运行。
有什么建议吗?