2016-07-01 3 views
0

Во-первых, я не уверен, что это возможно сделать в 1 запросе. Надеюсь, что так.Mysql выбрать несколько записей исполнителя на дорожку, используя таблицу соединений

У меня есть эти таблицы:

artist 
- id 
- name 

track 
- id 
- title 

track_artist 
- track_id 
- artist_id 
(with UNIQUE index on the combined columns) 

дорожка может иметь несколько художников, и художник может иметь несколько дорожек, таким образом, оба из них имеют отношение ManyToMany с помощью таблицы перехода.

Теперь мне нужна информация о треке №1, включая некоторую форму массива (как значение внутри этой записи, возможно, названное artists), которое содержит все записи исполнителя, относящиеся к этой дорожке.

Что в псевдо-коде должны в конечном итоге выглядит примерно так:

- id : 1 
- title : "example Track Title" 
- artists : 
    [ 
    - id : 1 
    - name : "Foo Artist Name" 
    ], 
    [ 
    - id : 2 
    - name : "Bar Artist Name" 
    ] 

Возможно ли это? Если нет, то какой будет лучший подход?

+0

я думаю, что ваш поиск для GROUP_CONCAT добавил ответ –

+0

Я не думаю, что SQL может возвращать результат, как этот формат. Возможно, вам следует использовать другой язык программы. – Blank

+0

@ 10086 Я тоже боюсь, что это не проблема, но я надеялся, что смогу сделать это в одном запросе. – xorinzor

ответ

0

Да, это возможно, вы можете сделать это с помощью следующего запроса

Select t.id,t.tital , group_concat(a.name) as artist name 
from track t join track_artist ta on t.id=ta.track_id inner join 
artist a on a.id=ta.artist_id group by t.id 
+0

, пожалуйста, измените его в соответствии с вашим требованием –

+0

это даст track_id, название и "," отделенный список исполнителя –

+0

Это, к сожалению, не совсем то, что я ищу, мне нужно иметь возможность связывать имя с идентификатором художник – xorinzor

Смежные вопросы