Выборка из двух таблиц MySQL

A
На сайте с 18.10.2007
Offline
125
747

Есть две таблицы в базе MySQL

companies
id
name

и

offices
id
company_id
address
region

Есть страница каталога компаний, где выводится список компаний и для каждой компании в списке - принадлежащие ей офисы.

На этой странице предусмотрена фильтрация компаний по регионам, но поскольку регионы присваиваются не компаниям, а офисам, у меня возникла проблема - как правильно, с точки зрения экономии ресурсов, сделать выборку из базы.

Т.е. если в фильтре выбран регион, то показываются только те компании, для которых найден хотя бы один офис в выбранном регионе и у каждой компании только те офисы, которые относятся к выбранному региону + к этому результаты выдачи разбиты на страницы.

У меня получается громоздская структура запросов, сначала я делаю

SELECT * FROM companies

обхожу результаты в цикле и для каждой итерации делаю

SELECT * FROM offices WHERE region = $region AND company_id = $iteration<id>

если результатов нет, удаляю итерацию из массива полученных компаний, потом вывожу X элементов из получившегося массива, начиная с индекса Номер_страницы*X

Чувствую, что можно это сделать проще и правильнее

Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
iqmaker
На сайте с 17.04.2012
Offline
309
#1

Чет мне кажется вы перемудрили, скажем выбрать компании по данному региону очень просто, будет вроде такого:


select company.id, count( office.id ) `count` from company, office where company.id = office.company_id and office.region = 3 group by company.id;

поле count, количество офисов по данному (3) региону у каждой из компаний.

Дальше вторая выборка, по которой выводится если нужно непесредственно офисы по нужному региону с привязкой к выбранным выше компаниям (3):


select office.id, office.company_id from office where region = 3 order by office.company_id;
siv1987
На сайте с 02.04.2009
Offline
427
#2

LEFT JOIN, не?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий