2015-08-29 2 views
2

у меня есть 2 таблицы, как это:Изменение запросов MySQL для объединения нескольких столбцов вместо из раздельных линий

Table: Company 
id| Name   | Area 
1 | Company A | New York 
2 | Company B | New York 
3 | Company C | Chicago 

Table: Service 
id| Type 
1 | Service 
1 | Delivery 
2 | Hotel 
2 | Restaurants 
3 | Movers 

Я хотел бы получить результаты только для Нью-Йорка, как это (без чикаго):

Name  | Area | Type 
Company A | New York| Service, Delivery 
Company B | New York| Hotel, Restaurants 

Но я вместо того, чтобы получить это:

Name  | Area  | type 
Company A | New York | Service 
Company A | New York | Delivery 
Company B | New York | Hotel 
Company B | New York | Restaurants 

Я попытался с помощью различны и CONCAT решать свои проблемы, но ю e запросы не заканчиваются, вместо этого они теряют время после работы более 6 секунд. Если я запустил запрос, чтобы получить результаты, которые я получил прямо сейчас, я получаю результаты менее 1 с.

Вот запросы я пытался до сих пор:

select p1.Name, 
GROUP_CONCAT(p2.Type) from company as p1, service as p2 
GROUP BY p1.CompanyName 
LIMIT 10; 

Результат: Тайм-аут

select DISTINCT company.Name from company 
LEFT JOIN service 
ON company.Number = service.Number AND service.Type LIKE '% York' 
Limit 50; 

Результат: никогда не заканчивается (даже не тайм-аут)

select p1.Name, p2.type from company as p1, service as p2 
where p1.id = p2.id 
LIMIT 10; 

Результат: Показывает действительно испорченные результаты, которые не могут быть такими:

Name  | Type 
Company A | Hotel 
Company B | Delivery 
Company B | Restaurants 

БД была первоначально Microsoft Access и я получал такие результаты там, не будучи знакомым с Microsoft Access я вычислял Microsoft должен быть проблемы и пытался получить запрос выполняется в MySQL, но одни и те же проблемы, что там происходит ... если я попытаюсь вручную подсчитать данные, то, что отображается, не отображается вообще, и это меня действительно смущает ... может кто-нибудь, пожалуйста, заглянуть в мои запросы и посоветовать мне, что я делаю неправильно? thx!

+0

это работает с Code-Монахи помогают, Heres модифицированный запрос, который обрабатывает частичный поиск: выберите c.name, c.area , group_concat (s.Type) как тип от компании c службой внутреннего соединения s на c.id = s.id где c.area LIKE '% York' группа по s.id; – somanit

ответ

0

использовать внутреннее соединение, чтобы получить согласованные записи и результаты группы по идентификатору компании.

Вот запрос:

select c.name,c.area,group_concat(s.Type) as type 
from Company c inner join service s on c.id=s.id 
where c.area='New York' 
group by s.id; 
+0

спасибо за ваш ответ monk, запрос, кажется, работает довольно быстро, давая ответы хорошо! Мне жаль, что я не могу ответить на ваш ответ. У меня еще нет достаточного количества баллов ... – somanit

0

Попробуйте это:

SELECT c.Name, c.Area, GROUP_CONCAT(s.Type SEPARATOR ', ') AS TYPE 
FROM Company AS c 
LEFT JOIN Service AS s ON c.id = s.id 
WHERE c.Area = 'New York' 
GROUP BY c.id; 
+0

спасибо за ваш ответ saharsh, к сожалению, тайм-аут запроса с кодом ошибки: 2013. Потерянное соединение с сервером MySQL во время запроса после запуска за 600.589 с – somanit