Hi Mysqlers,
 
I have a table which implements a tree-like heirarchy:
In the example below a geographical heirarchy.
 
I would like to be able to pick a node in the tree and
Get everything logically below that node in the heirarchy:
(A self join?)
 
#
# Table structure for `tree`
#
 
CREATE TABLE `tree` (
  `name` varchar(40) NOT NULL default '',
  `parentname` varchar(40) NOT NULL default ''
) TYPE=MyISAM;
 
#
# Data for Table `tree`
#
 
INSERT INTO `tree` VALUES ('USA', '""');
INSERT INTO `tree` VALUES ('CA', 'USA');
INSERT INTO `tree` VALUES ('AZ', 'USA');
INSERT INTO `tree` VALUES ('Orange', 'CA');
INSERT INTO `tree` VALUES ('Red', 'CA');
INSERT INTO `tree` VALUES ('Blue', 'CA');
INSERT INTO `tree` VALUES ('Apache', 'AZ');
INSERT INTO `tree` VALUES ('Navajo', 'AZ');
INSERT INTO `tree` VALUES ('Mohawk', 'AZ');
INSERT INTO `tree` VALUES ('Monument', 'Apache');
INSERT INTO `tree` VALUES ('Statue', 'Apache');
 
 
I want to get e.g. all the locations in AZ.
 
SELECT t1.name, t1.parentname
FROM `tree` AS t1
      LEFT JOIN tree as t2 
            ON t1.parentname=t2.name
WHERE t2.name='AZ';
 
Gets me
Apache      AZ
Navajo      AZ
Mohawk      AZ
 
But not the nodes with names Monument and Statue
 
SELECT t1.name, t1.parentname
FROM `tree` AS t1
      LEFT JOIN tree as t2 
            ON t1.parentname=t2.name
      LEFT JOIN tree as t3 
            ON t2.parentname=t3.name
WHERE t3.name='AZ';
 
Gets me 
Monument    Apache
Statue      Apache
 
But not the nodes with names Apache, Navajo, Mohawk
 
Can anyone tell me the correct syntax to pick a node in the tree and get
everything logically below that node in the heirarchy?
 
   
Thanks
Joe Mellon, 
[EMAIL PROTECTED]

Reply via email to