Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Pobierz wszystkie dzieci według rodziców w zapytaniu mysql

W tym celu musisz mieć zapisaną funkcję :

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 $$

Następnie możesz zadzwonić jak :

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

Możesz również mieć filtry:

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

PRZYKŁADOWE SKŁADKI




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Numer wiersza na grupę w mysql

  2. Kiedy powinienem używać skompresowanego protokołu MySQL?

  3. dwa słowa i spacje nie działają w zapytaniu MYSQL przy użyciu LIKE

  4. jak uciec przed ogranicznikiem zawartości kolumny podczas eksportu csv

  5. w tym brakujące wiersze (liczba zerowa) podczas korzystania z funkcji GROUP BY