項目中有需要根據ParentId查詢ChildId,由於mysql本身不能提供迭代的函數。因此使用存儲過程迭代查詢。記錄在此,下次可以直接複製使用。
DECLARE _effectrow int;
DECLARE _max int;
set _max=0;
SET _effectrow=1;
#獲取所有商品種類的頂級ID
DROP TEMPORARY TABLE IF EXISTS temp_catagory;
CREATE TEMPORARY TABLE temp_catagory(catagoryid bigint,level int);
DROP TEMPORARY TABLE IF EXISTS temp_mid_catagory;
CREATE TEMPORARY TABLE temp_mid_catagory(catagoryid bigint);
INSERT temp_catagory(catagoryid,level) SELECT id,0 FROM catalogs WHERE CompanyId=_companyid AND ParentId=0;
outer_label: #設置一個標記
WHILE _effectrow>0 DO
set _max=_max+1;
IF _max>10 THEN
LEAVE outer_label ;
END IF;
#獲取所有商品種類的子商品種類
INSERT temp_mid_catagory(catagoryid)
SELECT id FROM catalogs a WHERE CompanyId=_companyid AND
EXISTS(SELECT 1 FROM temp_catagory b WHERE a.ParentId=b.catagoryid AND LEVEL=(_max-1));
SET _effectrow=ROW_COUNT();
IF _effectrow>0 THEN
INSERT temp_catagory(catagoryid,level) SELECT catagoryid,_max FROM temp_mid_catagory;
DELETE FROM temp_mid_catagory;
END IF;
END WHILE;
# SELECT * FROM temp_catagory;