| а DISTINCT разве не выбирает уникальные значения среди ВСЕХ строк?
мне же надо из конкретной ячейки выбрать уникальные значения...
задача:
есть список услуг, предоставляемых либо по всей стране, либо в определенной области,
либо в определенных районах одной или нескольких областей. страна, понятно, одна.
областей 13, районов - 51. области забиты в таблицу с полями - id, name, районы - в другую
таблицу с полями - id, name, id_peri (указан id области, в которую входит район). в третьей
таблице забиты услуги, там куча полей, которые нам сейчас неинтересны. есть два поля
для id области и id района. если там стоит -2, значит, услуга действует по всей стране.
если стоит положительное число в поле id_ области и -1 в поле id_ района, это значит, что
услуга действует по всей области. если стоит положительное число в поле id_ района, это
значит, что услуга действует только в районе. так у меня раньше было.
потом обнаружилось, что услуга может действовать в нескольких районах. пока эти районы
были из одной области, я записывала их id через запятую, потом делила строку, делала
запрос на название района и выводила названия в цикле. но вверху надо было вывести еще
и название области. я его брала из столбца id_ области таблицы услуг, делала запрос к таблице областей, чтобы получить ее имя по id.
а потом обнаружилось, что услуга может действовать в нескольких районах из разных областей, да еще вдобавок и какой-то области целиком. вот тут я застопорилась. если у меня задействована целая область, в поле id_ района надо ставить -1, но мне туда нужно записать еще и id других районов, а в поле id_ области - номера областей, к которым они относятся.
решила так:
1. если действует по всей стране - пишу -2 в поле id_ области и ничего в поле id_ района.
2. если действует в области (одной или нескольких) целиком - пишу id_ области (через запятую, если их несколько) в поле id_ области и ничего в поле id_ района.
3. если действует только в районах и ни в одной области целиком - пишу номера районов (через запятую) в поле id_ района и ничего в поле id_oblasti.
4. если действует в нескольких областях и/или в нескольких районах из разных областей - пишу в поле id_ области номера областей (через запятую), а в поле id_ района - номера районов.
тогда при выводе:
1. если -2 - то по всей стране.
2. если >0 в поле id_ области - то по всей/всем области/областям
3. если >0 в поле id_ района - то по районам (а название областей, к которым они относятся,
надо вытащить по отдельному запросу из таблицы областей).
вот тут опять заминка - теперь в таблице услуг у меня нет id области, есть только id района.
по нему я делаю запрос к таблице районов, вытаскиваю id области и по этому id_ области надо вытащить название области из таблицы областей. получается 2 запроса (а с тем, который выбирает услугу - три). не слишком ли много? все ведь делается в цикле. записей немного, в таблице услуг - около 200, областей - 13, районов - 51. услуг, которые предоставляются по разным районам из разных областей - штук 50.
не будет ли тормозить сервер с такими запросами? | |