Mysql - объединение нескольких идентификаторов и объединение объединенного столбца? - PullRequest
1 голос
/ 18 сентября 2011

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

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

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), но это возвращает только одно имя исполнителя. Я хотел бы объединить всех задействованных художников в одну возвращаемую колонку, разделенную конвейером, чтобы потом можно было отформатировать.

1 Ответ

3 голосов
/ 18 сентября 2011

Я предлагаю вам изменить дизайн базы данных, чтобы иметь таблицу соединений с именем 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
...