Mysql 函数 - 不知道从哪里开始

Posted

技术标签:

【中文标题】Mysql 函数 - 不知道从哪里开始【英文标题】:Mysql Function - not sure where to start 【发布时间】:2013-03-04 14:45:16 【问题描述】:

我想在 mysql 中编写一个函数,从给定的产品代码中返回一个格式化的字符串

这是我现在需要手动进行调用以获得所需结果的示例。

SELECT p.productcategoryid from products p where (isnull(p.endeffdt) or (p.endeffdt = '0000-00-00') or (p.endeffdt > now())) and p.code='T29R66N1';

T29R66NQ 是我需要完整路径的产品代码 - 上述调用返回“38”作为类别 ID。

然后我根据上面的结果执行以下选择

SELECT name,parentid,productcategorypath FROM productcategory WHERE recid = '38';

返回

名称->内置滚刀 parentid->7 productcategorypath=222,7,38

然后使用该结果

SELECT name,parentid,productcategorypath FROM productcategory WHERE recid = '7';

给我

名称->内置 parentid->222 productcategorypath=222,7

然后我再做一次

SELECT name,parentid,productcategorypath FROM productcategory WHERE recid = '222';

这反过来又给了我

名称->厨房和家用电器 parentid->0 productcategorypath=222

我停在那里,因为 parentid = 0(它可能会继续进行更多迭代,但总是以父 id 0 结束)但我需要最后 3 次选择的结果给我以下字符串

Kitchen & Home Appliances > Built-In  > Built-In Hobs

我想要一个mysql函数,我可以像这样使用它

select getpath(code) from products where code='T29R66N1'

任何帮助将不胜感激。

编辑:

我自己弄明白了——这是我的功能

如果存在则删除函数 mydb.getpath;

CREATE FUNCTION mydb.getpath (itemid VARCHAR(20))

返回 varchar(255)

开始

声明路径名 varchar(255); 声明 tmp_name varchar(255); DECLARE tmp_parentid INT; DECLARE tmp_parentid1 INT;

SELECT p.productcategoryid INTO tmp_parentid from products p where (isnull(p.endeffdt) or (p.endeffdt = '0000-00-00') or (p.endeffdt > now())) and p.code= itemid;

myloop:循环

SELECT name,parentid INTO tmp_name,tmp_parentid1 FROM productcategory WHERE recid = tmp_parentid; SET path_name = concat_ws(' > ', tmp_name,path_name); 如果 tmp_parentid1!=0 那么 SET tmp_parentid = tmp_parentid1; 迭代 myloop; 其他 离开我的循环; 万一; 结束循环;

返回路径名;

结束;

【问题讨论】:

您使用的结构称为邻接表。以下是帮助您入门的参考:ulaptech.blogspot.ca/2010/05/… 感谢@dnagirl 的评论 :-) 【参考方案1】:
DROP FUNCTION IF EXISTS mydb.getpath;

CREATE FUNCTION mydb.getpath (itemid VARCHAR(20))

RETURNS varchar(255) 

BEGIN

DECLARE path_name varchar(255);
DECLARE tmp_name varchar(255);
DECLARE tmp_parentid INT;
DECLARE tmp_parentid1 INT;

SELECT p.productcategoryid INTO tmp_parentid from products p where (isnull(p.endeffdt) or (p.endeffdt = '0000-00-00') or (p.endeffdt > now())) and p.code=itemid;

myloop:LOOP

SELECT name,parentid INTO tmp_name,tmp_parentid1 FROM productcategory WHERE recid = tmp_parentid;
SET path_name = concat_ws(' > ', tmp_name,path_name);
IF tmp_parentid1!=0 THEN
SET tmp_parentid = tmp_parentid1;
ITERATE myloop;
ELSE
LEAVE myloop;
END IF; 
END LOOP;


RETURN path_name;


END;

【讨论】:

以上是关于Mysql 函数 - 不知道从哪里开始的主要内容,如果未能解决你的问题,请参考以下文章

使用 json 在 python / django 中设置用户登录,但不知道从哪里开始

我可以知道从哪里调用/调用函数吗?

CloudKit 作为使用常规网络主机的 CMS,不知道从哪里开始?是不是可以?

我想做一个关于声音编程的项目,但我不知道从哪里开始

我想创建一个可滚动的弹出列表窗口,但我不知道从哪里开始。我用啥来做这个?

零基础学Python需要从哪里开始?