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    ,     01  
  :select find_in_set(2,'1,2,3');       2
                                 。
select * from user where find_in_set(id,getAllChildUserId(1));
         id 1