Язык разработки и БД: PHP / MySQL
У меня есть таблица geo_places
с примерно 8 миллионами географических местоположений.
Все эти места являются иерархическими, и я использую
- parent_id (смежность) ,
- lft / rgt (вложенный набор)
- и родословная (перечисляемая) .
Теперь у меня есть таблица "точек интереса", называемая entities
, которая назначенагеографическое местоположение, и я записываю для каждого объекта:
lft
значение местоположения в geo_places
- и фактическое
ID
географического местоположения.
Теперь мне нужен способ предоставить список каталогов с подсчетом EFIFICNETLY (но я все равно буду кешировать это) из всех мест, которые находятся ниже местоположения.
Например, если я беру Европу, я должен увидеть все места, у которых есть parent_id Европы, а также количество объектов под ним.Помня о том, что место не назначается напрямую Европе, но может быть назначено маленькой деревне в Италии (которая является ребенком Европы).
Вы знаете, что это тоже ребенок Европы, потому что:
- значение
lft
маленькой деревни в Италии находится между значениями lft
и rgt
местоположение - или потому что родословная отображается на место.
Например, у Европы будет путь предков /1
и ID 5. (1 означает "Мир").И тогда маленькая деревня в Италии будет иметь /1/5/234/28924/124128
, где 1 = Мир 5 = Европа 234 = Италия 28924 = Бергамо и т. Д. И т. Д.
В любом случае, так я структурировалнабор данных, и я уже использовал смесь иерархических структур, чтобы сделать мои запросы намного более эффективными (для тех из вас, кто интересуется, почему я поддерживаю вложенный набор, смежность и перечисление ... это потому, что я получаю лучшеевсех структур таким образом).
Это пример того, что я пытаюсь сделать.![Example](https://i.stack.imgur.com/CfL6D.jpg)
Я гибкий и могу изменить способ управления местоположениями, если это необходимо.Тем не менее, это также мультитенантное приложение, поэтому я хотел бы попытаться избежать сохранения значений в geo_places, если этого можно избежать.
Проще говоря: выберите местоположение ... затем покажите все местоположения, которые имеют точки интереса, назначенные либо этому местоположению, либо дочернему объекту этого местоположения.
Есть рекомендации?