我想在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