2017-01-26 12 views
-1

У меня есть следующие таблицы:MYSQL комплекс Регистрация один-ко-многим

клиентов:

 
| id | name  | code | zone | 
-------------------------------- 
| 1 | client 1 | a1b1 | zone1| 
| 2 | client 2 | a2b2 | zone2| 

контакты:

 
| id_contact | first_name | last_name | 
---------------------------------------- 
| 11   | first1  | last1  | 
| 22   | first2  | last2  | 
| 33   | first3  | last3  | 
| 44   | first4  | last4  | 

client_contacts:

 
| id_client | id_contact | 
-------------------------- 
| 1   | 11   | 
| 1   | 22   | 
| 1   | 33   | 
| 2   | 11   | 
| 2   | 44   | 

предложения:

 
| id_offer | id_client | value | 
-------------------------- 
| 111  | 1   | 100 | 
| 222  | 1   | 200 | 
| 333  | 1   | 300 | 
| 444  | 2   | 400 | 

Я хотел бы через оптимальный выбор для получения:

 
| id_client | name  | code | zone | contacts_pers | total_offer_value | 
---------------------------------------------------------------------------- 
| 1   | client 1 | a1b1 | zone1 | first1 last1; | 600    | 
             first2 last2; 
             first3 last3; 
| 2   | client 2 | a2b2 | zone2 | first1 last1; | 400    | 
             first4 last4; 

Я знаю, как получить желаемый результат с "GROUP_CONCAT" и хранится процедуры для «total_offer_value». Но как получить желаемый результат от одного эффективного выбора?

+0

Можете ли вы вставить свой текущий запрос на вопрос? –

ответ

0

SELECT c.id, c.name, c.code, c.zone, GROUP_CONCAT (DISTINCT CONCAT (co.first_name, "", c.last_name) SEPARATOR ";") AS contact_pers, func_total_offer_value (c.id) КАК total_offer_value

от клиентов с

LEFT OUTER JOIN (client_contacts куб.см, контакты со) ВКЛ (c.id = cc.id_client И cc.id_contact = co.id_contact) ГРУППА ПО c.id