mysql 存儲過程

直接點,代碼爲主:html

1.建立表

CREATE TABLE `t_tree` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `park_id` int(11) NOT NULL COMMENT '園區id',
  `parent_id` int(11) NOT NULL COMMENT '父tree的id',
  `level` int(11) DEFAULT NULL COMMENT '層級',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8

2.插入數據

INSERT INTO `t_tree` VALUES
    (1,1,0,1),(2,1,1,2),
    (3,1,1,2),(4,1,2,3),
    (5,1,2,3),(6,1,3,3),
    (7,1,4,3),(8,1,4,4),
    (9,1,6,4),(10,1,6,4),
    (11,1,7,4),(12,2,0,1),
    (13,2,12,2),(14,2,12,2);

clipboard.png

3.存儲過程代碼:

CREATE DEFINER=`root`@`%` PROCEDURE `getNodes`(in tree_id int)
BEGIN
 
  declare str_tds varchar(1000) default '$';
  declare str_treeIds varchar(100);


  set str_treeIds = cast(tree_id as char);

  while  str_treeIds is not null do 
    set str_tds =concat(str_tds,",",str_treeIds);
    SELECT 
    GROUP_CONCAT(id)
INTO str_treeIds FROM
    t_tree t
WHERE
    FIND_IN_SET(parent_id, str_treeIds) > 0;
  end while;
 

SELECT 
    id AS tree_id
FROM
    t_tree
WHERE
    FIND_IN_SET(id, str_tds);
   

END

使用mysql 函數

cast():MySQL提供了CAST()函數,它能夠把一個值轉化爲指定的數據類型
concat():CONCAT(s1,s2...,sn)將s1,s2...,sn鏈接成字符串
group_concat():GROUP_CONCAT(col) 返回由屬於一組的列值鏈接組合而成的結果;
FIND_IN_SET():FIND_IN_SET(str,list)分析逗號分隔的list列表,若是發現str,返回str在list中的位置mysql

4.使用存儲過程

call getNodes(2);sql

結果yii

clipboard.png


囉嗦一下:

最新開發中使用了mysql存儲過程。上次使用仍是2014年浸會上學的時候,爲了寫這個,真是花了好長時間。最近又從新研究了下。感嘆時間飛逝啊。一轉眼四年了。做爲僞球迷的我,當時仍是大多特的球迷。自從渣叔走了之後,就不多關注多特蒙德了。記念一下僞球迷的青春函數

clipboard.png

5.參考學習

存儲過程學習學習

相關文章
相關標籤/搜索