2010-07-25 8 views
1

J'ai le problème suivant Je 3 tableau (tous les sont utilisés UTF8/utf8_general_ci encodage) films, chaînes, i également 3 movie_channels de table quiMySQL group_concat commande par UTF8

est juste une combinaison de les deux autres avec seulement deux champs: movie_id, CHANNEL_ID voici mon canaux tableau (code, nom)

'1', 'ОРТ' 
'2', 'ТК Спорт' 
'3', 'ТК ТНВ' 
'4', 'НТВ' 
'5', 'НТВ+' 
'6', 'TSN' 

ici est ma table movie_channels (film _id, CHANNEL_ID) CHANNEL_ID références code champ dans les canaux tableau

'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' 

ne pas oublier les guillemets sur les valeurs d'id. ils sont tous ints bien sûr, pas les caractères, il est juste en collant question

pour chaque film que je dois afficher la liste séparées par des virgules des canaux i utilisé 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 

mais je ne aime pas l'ordre de concat pour movie_id # 19 j'ai besoin de sql ci-dessus pour afficher TSN, ТК Спорт mais il ne cesse de me renvoyer ТК Спорт, TSN. J'ai essayé d'utiliser l'ordre par code desc avec aucune chance, essayé par char_length (asc) sans succès des idées?

Répondre

1

Si pour chaque film que vous voulez lister tous les canaux qui montrent ce film, vous avez besoin de quelque chose comme ceci:

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; 
1

Vous pouvez ajouter un ORDER BY clause dans l'ensemble GROUP_CONCAT() pour ajuster l'ordre des groupés chaîne.