MySql запрос для начинающего.

Coldboy
Дата: 15.01.2013 10:57:46
Здравствуйте. Суть такова имеется одна таблица, в которой информация Х, 1 строчка - id информации. далее имеется таблица Y в ней другая информация и она связана с таблицей X по id таблицы X, причем в таблице Y может несколько строчек соответствовать параметру id, усечение идет по временному интервалу. Каким запрос мне получить на выходе такую, таблицу со строками такого типа строки Х таблицы и ее колонки+ 1 строка к каждой строки склеенная из нескольких строк Y. Короче строчки Y клеятся в одну строчку и закрепляются к строкам Х по id.
tanglir
Дата: 15.01.2013 11:06:55
Coldboy
+ 1 строка к каждой строки склеенная из нескольких строк Y
group_concat()
Coldboy
Дата: 15.01.2013 11:13:04
угу уже нашел. спасибо. а селект другой таблицы до FROM же ставить?
tanglir
Дата: 15.01.2013 11:20:50
Coldboy,
select tx.something, group_concat(ty.something_else)
from table_x as tx 
join table_y as ty on tx.id=ty.id_tx
group by tx.something
Coldboy
Дата: 15.01.2013 11:25:27
SELECT s.channel_id, us.service_id, c.name, c.mcast, c.sort, c.logo, c.rating(

SELECT GROUP_CONCAT( CONCAT( epg.time_start, ':', epg.name )
SEPARATOR '@' )
FROM btv_programs epg
WHERE epg.time_start >= '2012-11-16 03:40:00'
AND time_end <= '2012-11-16 05:25:00'
)
FROM btv_channel_services s, iptv.iptv_user_services us, btv_channels c


ну че то он не тащит...
Coldboy
Дата: 15.01.2013 11:45:02
Хотя по отдельности оба запроса работают нормально и дают, что надо а вместе никак. как быть?
Coldboy
Дата: 15.01.2013 11:49:22
ошибка очевидна, забыл запятую в селекте в c.rating. конечный такого вида будет
SELECT s.channel_id,us.service_id, c.name, c.mcast, c.sort, c.logo, c.rating,
(
SELECT GROUP_CONCAT( concat(DATE_FORMAT(epg.time_start, "%H:%i" ),':',epg.name)
SEPARATOR ' @ ' )
FROM btv_programs epg
WHERE epg.time_start >= '2012-11-16 03:40:00'
AND time_end <= '2012-11-16 04:00:00'
AND epg.channel_id = s.channel_id
)
FROM iptv.btv_channel_services s,iptv.iptv_user_services us, iptv.btv_channels c
where s.service_id = us.service_id and us.user_id ='1079' and c.id = s.channel_id group by channel_id order by c.sort
tanglir
Дата: 15.01.2013 11:55:38
Coldboy
SELECT s.channel_id,us.service_id, c.name, c.mcast, c.sort, c.logo, c.rating,
<...>
group by channel_id
Берегите руки, вам могут их оторвать
Coldboy
Дата: 15.01.2013 14:44:43
почему?
AlexeyVD
Дата: 15.01.2013 15:26:40
Coldboy,

Потому что, при использовании GROUP BY, в блоке SELECT нужно перечислять либо те поля, по которым вы группируете, либо другие поля, но с применением агрегатных функций. В противном случае результат запроса будет непредсказуем и практически наверняка неверен. Обычно СУБД ругаются на этом моменте, но мускуль такие вольности допускает.