У меня есть следующая таблица для местоположений с древовидной структурой данных:
CREATE TABLE `location` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) DEFAULT NULL,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`slug` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`lft` int(11) NOT NULL,
`lvl` int(11) NOT NULL,
`rgt` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Таким образом, с помощью этой древовидной структуры я могу получить «путь» листа с этим запросом:
select l2.id, l2.name
from location l1
inner join location l2 on (l2.lft <= l1.lft and l2.rgt >= l1.rgt)
where l1.id = 5
group by l2.id
order by l2.lvl;
И это приведет к чему-то вроде:
id name
1 World
2 Europe
3 England
4 London
5 Chelsea
И у меня есть еще одна таблица с некоторыми свойствами реального состояния:
CREATE TABLE `property` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`location_id` int(11) DEFAULT NULL,
`address` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`price` double NOT NULL,
PRIMARY KEY (`id`),
KEY `IDX_8BF21CDE64D218E` (`location_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Я хотел бы сделать запросполучить не только названия местоположений, но и количество свойств, вложенных в каждый узел.Так, например, в Англии я должен получить сумму свойств в Лондоне, Манчестере, Ливерпуле ... что-то вроде:
id name count
1 World 15000
2 Europe 10000
3 England 5000
4 London 3000
5 Chelsea 200