Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MYSQL, LEFT JOIN / 6 сообщений из 6, страница 1 из 1
22.01.2015, 15:35:04
    #38860807
necoro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MYSQL, LEFT JOIN
Доброго времени суток. Такая ситуация, есть три таблицы:

Первая (user_cards):
Имя Тип
id int(11)
crt_user int(3)
date date
code int(6)
name varchar(50)

Вторая (user_cards_multy_spec):
Имя Тип
code int(6)
spec int(2)

Ну и третья(user_multi_specialty)
Имя Тип
spec int(2)
name varchar(20)

В первой хранится общая информация о клиентах с уникальным полем code. Во второй таблице хранятся специализации клиента по кодам(специализаций может быть много для одного клиента а может и вообще не быть). В третьей соответственно хранятся названия этих самых специальностей.

Вопрос.
Можно ли как-то сформировать запрос, так что бы выводилась следующая строка:
user_cards.name, user_cards.code и user_multi_specialty.name (все в которых находится данный клиент через ",". Если нет специализации, то строку все равно вывести).
...
Рейтинг: 0 / 0
22.01.2015, 16:12:37
    #38860842
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MYSQL, LEFT JOIN
necoro,

group by + group_concat()
...
Рейтинг: 0 / 0
22.01.2015, 16:23:33
    #38860851
necoro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MYSQL, LEFT JOIN
tanglir,

Спасибо за нужное направление )
Запрос вида

Код: sql
1.
select c.name,c.id,c.code,s.type,GROUP_CONCAT(t.name) as type_name FROM user_cards c left join user_cards_multy_type s ON c.code = s.code left join user_type t on s.type=t.id GROUP BY c.code ORDER BY c.code DESC limit 0,50 



Решил все проблемы
...
Рейтинг: 0 / 0
23.01.2015, 09:37:15
    #38861389
necoro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MYSQL, LEFT JOIN
Возник еще один вопрос, полный запрос в итоге имеет вид
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select provider.name,provider.id,provider.code,IFNULL(GROUP_CONCAT(t.name),'Unset') as type_name,IFNULL(GROUP_CONCAT(sname.name),'Unset') as spec_name, provider.notes,provider.addr,provider.phone,provider.clas,provider.agr1_number, country_list.name as cur_country,user_cities.name as cur_cities,ap_cards,all_day,provider.priority,provider.agr1_discount 
FROM user_cards provider 
                                    left join user_cards_multy_type s ON provider.code = s.code 
                                    left join user_type t on s.type=t.id 
                                    left join user_cards_multy_spec spec on spec.prov_code = s.code 
                                    left join user_multi_specialty sname on sname.id=spec.spec, 
                                    user_countries as country_list,user_cities 
Where provider.country=country_list.id and provider.city=user_cities.id 
GROUP BY provider.code,t.name ORDER BY provider.code DESC limit 0,50 



На выходе получаю отдельную строку на каждый тип клиента (первые два join), как можно исправить запрос что бы в итоге получать одну строку с перечислением всех типов и специализаций?
...
Рейтинг: 0 / 0
23.01.2015, 09:40:49
    #38861393
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MYSQL, LEFT JOIN
necoroв итоге получать одну строку с перечислением всех типов и специализаций?GROUP BY + GROUP_CONCAT()
...
Рейтинг: 0 / 0
23.01.2015, 14:21:27
    #38861773
necoro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MYSQL, LEFT JOIN
Akina,

Нет, тут уже нужно было использовать DISTINCT.
В итоге получился такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
select provider.name,provider.id,provider.code,IFNULL(GROUP_CONCAT(DISTINCT t.name),'Unset') as type_name,IFNULL(GROUP_CONCAT(DISTINCT sname.name),'Unset') as spec_name, provider.notes,provider.addr,
provider.phone,provider.clas,provider.agr1_number, country_list.name as cur_country,user_cities.name as cur_cities,ap_cards,all_day,provider.priority,provider.agr1_discount 
FROM user_cards provider left join user_cards_multy_type s ON provider.code = s.code 
left join user_type t on s.type=t.id left join user_cards_multy_spec spec on spec.prov_code = s.code 
left join user_multi_specialty sname on sname.id=spec.spec, user_countries as country_list,user_cities 
Where provider.country=country_list.id and provider.city=user_cities.id GROUP BY provider.code ORDER BY provider.code DESC limit 0,50 
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MYSQL, LEFT JOIN / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]