@maragon

Хранение и вывод городов из БД Mysql методом closure table?

Кто может расписать поподробнее хранение и извлечение городов методом Closure Table в Mysql.
  • Вопрос задан
  • 273 просмотра
Решения вопроса 1
Maksclub
@Maksclub
maksfedorov.ru
делайте как вам в прошлом вопросе посоветовали

сделайте таблицы:
  • s_regions
  • s_regions_path

s_regions
+-----------------------------+
|  id   |         name        |  
+-----------------------------+
|   1   |         Россия      |
+-----------------------------+
|   2   |  Московская область |
+-----------------------------+
|   3   |        Москва       |
+-----------------------------+


Я мог немного напутать с полем level, так как только вчера сам узнал о таком алгоритме и не реализовываал его еще
s_regions_path
+-----------------------------------+
| region_id |  path_id  |   level   |
+-----------------------------------+
|      2      |      1    |    1    |   <-- Тут мы храним связь Мособласти, указываем связь с Россией
+-----------------------------------+
|      3      |      2    |    1    |   <-- Тут мы храним связь  Москвы указывая на Мособласть
+-----------------------------------+
|      3      |      1    |    2    |   <-- Тут мы храним связь Москвы с Россией
+-----------------------------------+


Достать всех детей России (id=1):
SELECT r.id, r.name
FROM s_regions r
LEFT JOIN s_regions_path l ON l.region_id=r.id
WHERE l.path_id=1


Достать только города Мособласти (id=2), то есть только следующий уровень (не уходя глубже):
SELECT r.id, r.name
FROM s_regions r
LEFT JOIN s_regions_path l ON l.region_id=r.id
WHERE l.path_id=2
AND l.level=1


Получить все зависимости для Москвы (id=3) и отсортировать по возрастанию уровня:
SELECT r.id, r.name
FROM s_regions r
LEFT JOIN s_regions_path l ON l.region_id=r.id
WHERE l.region_id =3
ORDER BY l.level DESC
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы