SOUS-ARBRE DANS UN ARBRE dans MySQL
Dans mon MYSQL Database COMPANY
, j'ai une Table: Employee
association récursive, un employé peut être patron d'un autre employé. A self relationship of kind (SuperVisor (1)- SuperVisee (∞) )
.
Requête pour créer une table:
CREATE TABLE IF NOT EXISTS `Employee` (
`SSN` varchar(64) NOT NULL,
`Name` varchar(64) DEFAULT NULL,
`Designation` varchar(128) NOT NULL,
`MSSN` varchar(64) NOT NULL,
PRIMARY KEY (`SSN`),
CONSTRAINT `FK_Manager_Employee`
FOREIGN KEY (`MSSN`) REFERENCES Employee(SSN)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
J'ai inséré un ensemble de tuples (Requête):
INSERT INTO Employee VALUES
("1", "A", "OWNER", "1"),
("2", "B", "BOSS", "1"), # Employees under OWNER
("3", "F", "BOSS", "1"),
("4", "C", "BOSS", "2"), # Employees under B
("5", "H", "BOSS", "2"),
("6", "L", "WORKER", "2"),
("7", "I", "BOSS", "2"),
# Remaining Leaf nodes
("8", "K", "WORKER", "3"), # Employee under F
("9", "J", "WORKER", "7"), # Employee under I
("10","G", "WORKER", "5"), # Employee under H
("11","D", "WORKER", "4"), # Employee under C
("12","E", "WORKER", "4")
Les lignes insérées ont la relation arborescente-hiérarchique suivante :
A <---ROOT-OWNER
/|\
/ A \
B F
//| \ \
// | \ K
/ | | \
I L H C
/ | / \
J G D E
J'ai écrit une requête pour trouver une relation:
SELECT SUPERVISOR.name AS SuperVisor,
GROUP_CONCAT(SUPERVISEE.name ORDER BY SUPERVISEE.name ) AS SuperVisee,
COUNT(*)
FROM Employee AS SUPERVISOR
INNER JOIN Employee SUPERVISEE ON SUPERVISOR.SSN = SUPERVISEE.MSSN
GROUP BY SuperVisor;
Et la sortie est:
+------------+------------+----------+
| SuperVisor | SuperVisee | COUNT(*) |
+------------+------------+----------+
| A | A,B,F | 3 |
| B | C,H,I,L | 4 |
| C | D,E | 2 |
| F | K | 1 |
| H | G | 1 |
| I | J | 1 |
+------------+------------+----------+
6 rows in set (0.00 sec)
[ QUESTION ]
Au lieu d'un arbre hiérarchique complet, j'ai besoin SUB-TREE
d'un point (sélectif), par exemple:
si l'argument d'entrée est B
alors la sortie doit être comme ci-dessous ...
+------------+------------+----------+
| SuperVisor | SuperVisee | COUNT(*) |
+------------+------------+----------+
| B | C,H,I,L | 4 |
| C | D,E | 2 |
| H | G | 1 |
| I | J | 1 |
+------------+------------+----------+
Veuillez m'aider à ce sujet. Sinon, une procédure stockée peut être utile.
J'ai essayé, mais tous les efforts ont été inutiles!
It my experience
J'ai toujours eu une meilleure réponse de la part des experts . Et je pense qu'il était préférable de déplacer la question aux administrateurs de base de données. Dans tous les cas, je suis très reconnaissant envers stackoverflow et les personnes qui sont actives ici. J'ai vraiment trouvé une solution à de nombreux problèmes qui étaient très difficiles à trouver moi-même ou tout autre site Web.