CREATE TABLE IF NOT EXISTS `site_location` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`level` int(11) NOT NULL,
`lft` int(11) NOT NULL,
`rgt` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;
///DATA
INSERT INTO `site_location` (`id`, `level`, `lft`, `rgt`, `name`) VALUES
(1, 0, 1, 24, 'United Kingdom'),
(2, 1, 2, 19, 'London'),
(3, 2, 13, 14, 'Central London'),
(4, 2, 11, 12, 'East London'),
(5, 2, 9, 10, 'North London'),
(6, 2, 7, 8, 'North West London'),
(7, 2, 5, 6, 'South East London'),
(8, 2, 3, 4, 'West London'),
(9, 2, 15, 18, 'South West'),
(10, 3, 16, 17, 'Battersea'),
(11, 1, 20, 23, 'Brighton'),
(12, 2, 21, 22, 'Guildford');
CREATE TABLE IF NOT EXISTS `ads` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`category_id` int(11) NOT NULL,
`location` int(11) NOT NULL,
`title` varchar(255) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`id`,`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
INSERT INTO `ads` (`id`, `category_id`, `location`, `title`) VALUES
(1, 7, 10, 'Test1'),
(2, 9, 3, 'Test2'),
(3, 12, 10, 'Test3'),
(4, 13, 4, 'Test4');
当ID为ID = 1时返回
[ United Kingdom(4) ]
London(4)
Brighton(0)
当ID为ID = 2时
United Kingdom(4)
[ London(4) ]
South West(2)
Central London(1)
East London(1)
Brighton(0)
所以当选择“伦敦”时,我需要所有兄弟姐妹及其所有孩子
同样被选为“西南”时我需要所有兄弟姐妹的所有孩子,其父母的所有父母兄弟
United Kingdom(4)
London(4)
[ South West(2) ]
Battersea(2)
Central London(1)
East London(1)
Brighton(0)
以及在该位置有多少广告,例如在英国必须有4个,因为表中的所有广告都是4,西南必须有2个,因为在巴特西有2个
当id为11时
United Kingdom(4)
London(4)
[ Brighton(0) ]
Guildford(0)
我有一个问题: South West lft:15,rgt:18,level:2
SELECT
node.id,
node.alias,
node.level,
node.name,
COUNT(ads.id) as ads,
IF(node.lft = node.rgt-1, "0", "1") AS `has_children`
FROM
site_location AS parent LEFT JOIN
ads as ads ON (parent.id = ads.location),
site_location AS node
WHERE
parent.lft BETWEEN node.lft AND node.rgt
AND
parent.lft BETWEEN 15 AND 18
AND
node.level > 0
AND
node.level < 2 + 3
GROUP BY node.id
ORDER BY node.lft
这将返回
London(4)
South West(2)
Battersea(2)
我需要这样做
London(4)
South West(2)
Battersea(2)
Brighton(0)
是否可以使用单个查询执行此操作:? 如果有人可以提供帮助,那就太好了。提前谢谢!