Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Nhận tất cả trẻ em theo cha mẹ trong truy vấn mysql

Để làm được điều đó, bạn cần có một hàm được lưu trữ:

DELIMITER $$

DROP FUNCTION IF EXISTS `junk`.`GetFamilyTree` $$
CREATE FUNCTION `GetFamilyTree` (GivenID  VARCHAR(1024)) RETURNS varchar(1024) CHARSET latin1
DETERMINISTIC
BEGIN

    DECLARE rv,q,queue,queue_children,front_id VARCHAR(1024);
    DECLARE queue_length,pos INT;

    SET rv = '';
    SET queue = GivenID;
    SET queue_length = 1;

    WHILE queue_length > 0 DO
        SET front_id = queue;
        IF queue_length = 1 THEN
            SET queue = '';
        ELSE
            SET pos = LOCATE(',',queue) + 1;
            SET q = SUBSTR(queue,pos);
            SET queue = q;
        END IF;
        SET queue_length = queue_length - 1;

        SELECT IFNULL(qc,'') INTO queue_children
        FROM (SELECT GROUP_CONCAT(id) qc
        FROM Table1 WHERE manager = front_id) A;

        IF LENGTH(queue_children) = 0 THEN
            IF LENGTH(queue) = 0 THEN
                SET queue_length = 0;
            END IF;
        ELSE
            IF LENGTH(rv) = 0 THEN
                SET rv = queue_children;
            ELSE
                SET rv = CONCAT(rv,',',queue_children);
            END IF;
            IF LENGTH(queue) = 0 THEN
                SET queue = queue_children;
            ELSE
                SET queue = CONCAT(queue,',',queue_children);
            END IF;
            SET queue_length = LENGTH(queue) - LENGTH(REPLACE(queue,',','')) + 1;
        END IF;
    END WHILE;

    RETURN rv;
END $$

Sau đó, bạn có thể gọi như:

SELECT `id`, `manager`,GetFamilyTree(`id`) as children 
from Table1;

Bạn cũng có thể có các bộ lọc:

SELECT `id`, `manager`,GetFamilyTree(`id`) as children 
from Table1 where `id` = 'james';

MẪU FIDDLE




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo cơ sở dữ liệu trong MySQL

  2. Thực thi Python + MySQLdb

  3. Giá trị ngày giờ không chính xác khi thiết lập Django với MySQL

  4. Sử dụng .aggregate () trên một giá trị được giới thiệu bằng .extra (select ={...}) trong Truy vấn Django?

  5. Không có ánh xạ phương ngữ cho loại JDBC:1111