Иерархическое дерево - Как получить количество связанных строк узлов - PullRequest
0 голосов
/ 23 октября 2018

У меня есть следующая таблица для местоположений с древовидной структурой данных:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...