У меня есть следующая проблема, у меня есть 3 таблицы (весь используемого utf8 / utf8_general_ci кодирующий) фильмы, каналы, у меня также есть 3 таблицы movie_channels который
просто комбинация других двух со всего 2 полями: movie_id, channel_id вот моя таблица каналов (код, имя)
'1', 'ОРТ'
'2', 'ТК Спорт'
'3', 'ТК ТНВ'
'4', 'НТВ'
'5', 'НТВ+'
'6', 'TSN'
вот является моя movie_channels таблица (фильм _id, channel_id) channel_id ссылками code
поле в таблице каналов
'19', '2'
'19', '6'
'95', '1'
'95', '4'
'96', '1'
'96', '4'
'97', '1'
'97', '4'
'98', '1'
'98', '4'
'99', '1'
'99', '4'
'100', '1'
'100', '4'
не возражайте против кавычек на значениях идентификаторов. они - весь ints, конечно, не символы, он просто вставляет проблему
для каждого фильма я должен отобразить список разделенных запятой значений каналов, я использовал mysql group_concat
select t.movie_id,( select group_concat(c.name) from
movie_channels mc
join channels c on mc.channel_id=c.code
where mc.movie_id = t.movie_id
order by code desc )as audio_channel from movies t
но мне не нравится порядок concat для movie_id № 19, мне нужно вышеупомянутое sql для отображения TSN, ТК Спорт, но это продолжает возвращать меня ТК Спорт, TSN. Я пытался использовать порядок кодом desc без удачи, попробованного порядка char_length (asc) без успеха какие-либо идеи?
Если для каждого фильма вы хотите перечислить все каналы, которые показывают этот фильм, вам нужно что-то вроде этого:
SELECT
mc.movie_id,
GROUP_CONCAT(c.name) AS channels
FROM movie_channels AS mc
JOIN channels AS c
ON c.code = mc.channel_id
GROUP BY mc.movie_id
ORDER BY c.code DESC;
Вы можете добавить ORDER BY
предложение внутри GROUP_CONCAT()
агрегата, чтобы настроить порядок сгруппированной строки.