mysqlは、すべての部下の従業員関数とfind_を再帰的にクエリーします.in_set関数
2970 ワード
今日1つのページの検索をする時1つの需要があります:異なる人は現在のページのデータ量が異なって、データ量の規則は、上司はすべての下級従業員のデータを見ることができて、つまり下級従業員は自分のデータしか見ることができません.だからsqlを書く時where条件のあのデータの作成者は1つの動態の集合で、この動態の集合はどのように書きますか?したがって、親idクエリのすべての子idを入力するmysql関数が書かれており、メニュークエリ、組織機構クエリなどの上下関係の再帰クエリにも適用されます.
DELIMITER $$
USE `loanmarket`$$
DROP FUNCTION IF EXISTS `getAllChildUserId`$$
CREATE DEFINER=`root`@`%` FUNCTION `getAllChildUserId`(parentId INT) RETURNS VARCHAR(4000) CHARSET utf8
BEGIN
DECLARE oTemp VARCHAR(4000);
DECLARE oTempChild VARCHAR(4000);
SET oTemp = '$';
SET oTempChild = CAST(parentId AS CHAR);
WHILE oTempChild IS NOT NULL
DO
SET oTemp = CONCAT(oTemp,',',oTempChild);
SELECT GROUP_CONCAT(id) INTO oTempChild FROM ccq_user WHERE FIND_IN_SET(parent_id,oTempChild) > 0;
END WHILE;
RETURN oTemp;
END$$
DELIMITER ;
, "$,1,2,3", "$", , ,
mysql :find_in_set(str,strlist)
, str strlist , 0, 1
:select find_in_set(2,'1,2,3'); 2
。
select * from user where find_in_set(id,getAllChildUserId(1));
id 1