我想在MySQL中编写一个函数,从给定的产品代码返回一个格式化字符串的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(它可以继续用于多次迭代,但总是以0父ID结束),但我需要的结果从最后3个选择至给我下面的字符串
Kitchen & Home Appliances > Built-In > Built-In Hobs
我想一个MySQL功能,由此我可以用它像
select getpath(code) from products where code='T29R66N1'
任何帮助,将不胜感激。
编辑:
我设法弄清楚它自己 - 这是我的功能
DROP FUNCTION IF EXISTS mydb.getpath;
CREATE FUNCTION mydb。的getPath(为itemid VARCHAR(20))
RETURNS VARCHAR(255)
BEGIN
DECLARE路径名的varchar(255);
DECLARE tmp_name varchar(255);
DECLARE tmp_parentid INT;
DECLARE tmp_parentid1 INT;从产品p中选择p.productcategoryid INTO tmp_parentid其中(isnull(p.endeffdt)或(p.endeffdt ='0000-00-00')或(p.endeffdt> now()))和pCode =的itemid;
myloop:LOOP
SELECT姓名,parentId的INTO tmp_name的值,tmp_parentid1 FROM产品分类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;
您正在使用的结构被称为*邻接表*。这里有一个参考,让你开始:http://ulaptech.blogspot.ca/2010/05/retrieving-data-hierarchies-on-sql.html – dnagirl 2013-03-04 14:50:01
感谢@dnagirl的评论:-) – l0ckm4 2013-03-04 16:01:43