gpt4 book ai didi

php - 在 PHPmyADMIN 或 Navicat 中运行时,SQL 代码不会被执行

转载 作者:行者123 更新时间:2023-11-29 09:17:43 25 4
gpt4 key购买 nike

我有以下代码,但它不断出现错误。代码的第一部分创建了必要的表,然后是 - 应该创建存储过程但它没有。

有什么想法吗?

drop table if exists agent;

create table agent
(
agent_id int unsigned not null auto_increment primary key,
name varchar(32) not null,
commission_level tinyint unsigned default 0,
parent_agent_id int unsigned default null
)
engine = innodb;

insert into agent (name, commission_level, parent_agent_id) values

('I', 99, null),
('A', 7, 1),
('B', 6, 1),
('C', 5, 2),
('D', 6, 2),
('E', 5, 3),
('F', 2, 3),
('G', 5, 5),
('H', 1, 5);


delimiter ;

drop procedure if exists agent_hier;

delimiter #

create procedure agent_hier
(
in p_agent_id int unsigned
)
proc_main:begin

declare done tinyint unsigned default 0;
declare dpth smallint unsigned default 0;


create temporary table hier(
parent_agent_id int unsigned,
agent_id int unsigned,
depth smallint unsigned default 0
)engine = memory;

insert into hier values (p_agent_id, p_agent_id, dpth);

/* http://dev.mysql.com/doc/refman/5.0/en/temporary-table-problems.html */

create temporary table tmp engine=memory select * from hier;

while done <> 1 do

if exists( select 1 from agent a inner join hier on a.parent_agent_id = hier.agent_id and hier.depth = dpth) then

insert into hier
select a.parent_agent_id, a.agent_id, dpth + 1 from agent a
inner join tmp on a.parent_agent_id = tmp.agent_id and tmp.depth = dpth;

set dpth = dpth + 1;

truncate table tmp;
insert into tmp select * from hier where depth = dpth;

else
set done = 1;
end if;

end while;


select
a.agent_id,
a.name as agent_name,
if(a.agent_id = b.agent_id, null, b.agent_id) as parent_agent_id,
if(a.agent_id = b.agent_id, null, b.name) as parent_agent_name,
hier.depth,
a.commission_level
from
hier
inner join agent a on hier.agent_id = a.agent_id
inner join agent b on hier.parent_agent_id = b.agent_id
order by
-- dont want to sort by depth but by commision instead - i think ??
-- hier.depth, hier.agent_id;
a.commission_level desc;

drop temporary table if exists hier;
drop temporary table if exists tmp;

end proc_main #


delimiter ;


/*

select * from agent;

call agent_hier(1);
call agent_hier(2);
call agent_hier(3);
call agent_hier(5);
*/

最佳答案

我在这里为您制作了一个 navicrap 兼容脚本 http://pastie.org/1112694 - 如果您拥有相关权限,现在应该可以正常运行:P

受影响的行:0时间:0.001ms

关于php - 在 PHPmyADMIN 或 Navicat 中运行时,SQL 代码不会被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3558479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com