Mysql – объединение нескольких идентификаторов и объединение столбцов?

Не уверен, насколько точен заголовок моего вопроса, но позвольте мне объяснить немного лучше.

У меня две таблицы: исполнители, релизы

table artist
  artist_id, 
  artist_name

table release
  release_id,
  release_artist_ids,
  release_name

Есть еще имена столбцов, но это те, которые связаны с моей проблемой.

release_artist_ids может содержать один или несколько идентификаторов исполнителей, соответствующих таблице исполнителей. Если с одним и тем же release_id представлено более одного исполнителя, я разделил идентификаторы запятыми.

Итак, пример строки выпуска:

1 -- 2,5 -- Пример выпуска

Что я хотел бы сделать, так это перечислить релизы и присоединиться к таблице исполнителей, чтобы получить имена исполнителей, участвующих в релизе.

Мне удалось присоединиться, используя IN (release.release_artist_ids), но это возвращает только одно имя исполнителя. Я хотел бы объединить всех задействованных исполнителей в один возвращаемый столбец, разделенный трубой, чтобы я мог форматировать позже.


person user887515    schedule 17.09.2011    source источник
comment
Вы действительно должны избавиться от идентификаторов, разделенных запятыми, и правильно нормализовать свои таблицы. См. этот вопрос для идей: stackoverflow.com/q/7457643/723693   -  person ain    schedule 18.09.2011


Ответы (1)


Я предлагаю вам изменить структуру вашей базы данных, добавив в нее таблицу соединений с именем release_artist, которая моделирует -много взаимосвязей между артистами и релизами. В этой таблице должно быть два столбца: release_id и artist_id.

Если вы не можете изменить дизайн базы данных, вы можете использовать FIND_IN_SET, но это будет медленно:

SELECT
   release.release_id,
   GROUP_CONCAT(artist.artist_name, '|') AS artist_names
FROM artist 
JOIN release
ON FIND_IN_SET(artist.id, release.release_artist_ids)
GROUP BY release.release_id
person Mark Byers    schedule 17.09.2011
comment
Спасибо. Это работает. У меня не было мысли сделать дополнительный стол для артистов релиза. - person user887515; 18.09.2011