Если заглянуть в базу данных, Местоположения 2.0 — это фактически три таблицы.
Буквально на днях разгребал всё для распаковки на D7 под задачу.
Главный список — в таблице b_sale_location, которая фактически ОГРОМНАЯ куча местоположений, сваленных в одну кашу (страны, регионы, города, деревни и улицы).
Главные узлы:
--- Символьный код — колонка CODE. Если чистым запросом прочитать заказ и местоположение, мы нередко увидим не location_id, а location_code. Это не привязанный к почтовому индексу, строка вида "0000028023"
--- Родительство (например, город относится к области) указывается в столбце PARENT_ID
Он либо указан, либо ноль
--- Тип узла (например, город это, область или страна) указывается в столбце TYPE_ID
В таблице b_sale_loc_type - расшифровка в кодах:
* 1 COUNTRY
* 2 COUNTRY_DISTRICT
* 3 REGION
* 4 SUBREGION
* 5 CITY
* 6 VILLAGE
* 7 STREET
--- Глубина погружения (грубо говоря — ориентир, сколько родителей вверх) указана в столбце DEPTH_LEVEL (самый верхний узел в своей ветке имеет глубину == 1)
=====
В этой куче свой плюс: указав в заказе просто символьный код "00000705506" (CODE узла-улицы) мы тем самым, раскрутив цепочку вверх до DEPTH_LEVEL == 1 получаем абсолютно всё: от улицы до страны. Что в принципе и делается в текущей версии заказов.
=====
Теперь, когда есть вводная можете прикинуть её на свою задачу.
Вам нужно три выборки:
• первая — по узлам первого уровня ЛИБО соответствующим TYPE_ID (страна);
• вторая — те регионы, кто родителем имеет выбранную страну (если погружаться на регион);
• третья — те города, которые родителем имеют выбранный регион.
Как-то так =)