指定された製品コードから書式設定された文字列を返す関数を 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 は、フル パスが必要な製品コードです。上記の呼び出しは、カテゴリ ID として「38」を返します。
次に、上記の結果に基づいて次の選択を実行します
SELECT name,parentid,productcategorypath FROM productcategory WHERE recid = '38';
これは戻ります
name->ビルトイン ホブ
parentid->7
productcategorypath=222,7,38
その結果を使用して、私は
SELECT name,parentid,productcategorypath FROM productcategory WHERE recid = '7';
私に与える
name- >組み込みの
parentid->222
productcategorypath=222,7
繰り返しますが、私はそうします
SELECT name,parentid,productcategorypath FROM productcategory WHERE recid = '222';
それは私に与えます
name- >キッチン&家電
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))
戻り値 varchar(255)
始める
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;
マイループ:ループ
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;
反復 myloop;
ELSE
LEAVE myloop;
END IF;
エンドループ;RETURN path_name;
終わり;