Необходимо создать базу данных компаний по регионам и городам в РФ.
Регионы РФ представляют собой дерево: Федеральный округ — Область — Город. Дерево строится путем указания родителя элемента `parentid`.
У меня есть два пути, подскажите, по какому пойти.
Первый путь.
Хотелось бы, чтобы в таблице `компании` был только один столбец отвечающие за географическое положение Компании на территории РФ — таким образом, такая база данных была бы «Нормализованной». Но, тогда, чтобы отобразить все компании принадлежащие к корневому разделу (Федеральный округ), необходимо, сначала, вытащить всех «детей» этой ветки дерева:
...
WHERE `companies`.`region`
IN (
SELECT `regions`.`id`
FROM `regions`
WHERE `regions`.`parentid`
IN (
SELECT `regions`.`id`
FROM `regions`
WHERE `regions`.`sid` = '$_GET[sid_section]'
)
)
...
Причем, если мы находимся не в корне дерева, а в ветке, то необходимо искать детей с меньшим вложением:
...
WHERE `companies`.`region`
IN (
SELECT `regions`.`id`
FROM `regions`
WHERE `regions`.`sid` = '$_GET[sid_section]'
)
...
Для того, чтобы выяснить каким запросом пользоваться - необходимо определять на каком уровне дерева мы находимся, что в целом удручает меня сложностью и количеством запросов к БД.
Возможно, кто-то предложит оптимизированный запрос или структуру, очень надеюсь.
Второй путь.Забить на то, что количество ступеней дерева может разниться (добавить районы в какую-нибудь область), жестко задать трехступенчатую структуру, а в таблице `Компании` указывать три столбца (Округ,Область, Город)
к каждой записи!.