2014-01-22 2 views
0

У меня есть довольно простая функция поиска, которая позволяет пользователям искать компании в различных полях, используя различные объединения. Часть этого включает адреса компаний, которые являются отношениями «один ко многим». Один из этих адресов отмечен как штаб-квартира компании. Запрос может выглядеть примерно так:MySQL - заказ по сгруппированным элементам

SELECT comanies.*,customers.* 
FROM _customers 
NATURAL JOIN companies 
NATURAL JOIN company_addresses 
WHERE company_addresses.city_id = '5556614' 
GROUP BY company_id 

Как вы можете видеть, каждая компания должна иметь адрес в этом городе для согласования. Тем не менее, я также хочу заказать компании с теми, у кого есть этот город в качестве своей штаб-квартиры. На данный момент все адреса сгруппированы в одну строку, поэтому колонку в штаб-квартире нельзя использовать.

Как я могу воспользоваться услугами тех компаний, чья штаб-квартира находится в cit_id = 5556614, чтобы явиться первым?

ответ

0

Попробуйте использовать левое соединение вместо естественного соединения. В идеальном случае результатом должны быть все компании и клиенты, чья компания company_address.city_id = '5556614'. Таким образом, вы не должны получать никаких других данных.

0

Я думаю, что вы хотите добавить это order by пункт:

order by max(company_addresses.IsHeadquarters = 'Y') desc; 

Или то, что логика для определения штаб-квартиры.

Я бы рекомендовал вам поставить такое же выражение (max(company_addresses.IsHeadquarters = 'Y')) в оговорку select, чтобы вы могли идентифицировать компании со штаб-квартирой в городе.

Смежные вопросы