2013-05-15 3 views
-1

앨범의 ID를 갖고 있으며 앨범에서 모든 트랙을 가져오고 싶습니다. 앨범에는 많은 트랙이 있습니다. 트랙에는 많은 제작자 (아티스트)이 있습니다.조인 된 테이블을 통해 여러 행 가져 오기

MySQL의 구조

Database structure

문제 내가 전체 MySQL의에서 그것을 할 수 있는지 알고 아니면 내가 대신 일부 PHP를 추가해야하는 경우가 없습니다

.

편집 : 제 질문에 대한 답변이 충분하지 않았습니다. 문제는 조인 된 테이블로 쿼리를 수행하는 것이 아니라 아티스트 목록으로 트랙을 가져 오는 것이 었습니다. group_concat을 사용하여이를 처리 할 수 ​​있습니다.

자습서 :http://www.mysqlperformanceblog.com/2006/09/04/group_concat-useful-group-by-extension/

+0

순수한 mySQL으로 수행 – sectus

+0

먼저 가장 쉬운 방법을 선택하십시오. 그러면 다른 해결책이 더 분명해질 수 있습니다. – hd1

+0

U는 트랙을 가져 오려는 ablum의 이드를 알고 있습니까? – alwaysLearn

답변

2

그것은 당신이 데이터를 필요로하는지 달려있다. 아티스트에 관심이 있다면 앨범의 트랙과 아티스트를 트랙에 결합 할 수 있습니다. 이렇게하면 각 아티스트에 대한 레코드가 제공됩니다. 당신이 트랙에 더 관심이있어 그냥 작가를 나열해야하는 경우

SELECT 
    ar.* 
FROM albums AS al 
JOIN tracks AS t 
    ON t.album_id = al.album_id 
JOIN produced AS p 
    ON p.produced_track = t.track_id 
JOIN artists AS ar 
    ON ar.artist_id = p.produced_artist 

다음 같은 조인 않지만

SELECT 
    t.*, 
    GROUP_CONCAT(DISTINCT ar.name ORDER BY ar.name SEPARATOR ', ') AS artists 
FROM albums AS al 
JOIN tracks AS t 
    ON t.album_id = al.album_id 
JOIN produced AS p 
    ON p.produced_track = t.track_id 
JOIN artists AS ar 
    ON ar.artist_id = p.produced_artist 
GROUP BY t.track_id 
+0

그룹 concat가 해결책이었습니다! 고마워, 내 질문에 충분하지 않았어! – JeremyW

0

에 대해 알아 트랙 ID로 아티스트 이름 및 그룹에 GROUP_CONCAT를 사용 SQL joins는 :

SELECT * 
FROM Tracks 
    JOIN Produced ON Produced.produced_track = Tracks.track_id 
    JOIN Artists ON Artists.artist_id = Produced.produced_artists 
WHERE Tracks.track_album = ? 
0

아마 최고의 너무처럼 순수 SQL에서이 작업을 수행하는 것 :

SELECT * 
FROM albums al 
LEFT JOIN tracks tr ON (tr.ttack_album = al.album_id) 
LEFT JOIN produced pr ON (pr.produced_track = tr.track_id) 
LEFT JOIN artists ar ON (ar.artist_id = pr.produced_artist) 
WHERE al.album_id = thealbumid; 

그러나 데이터 사용 방법에 따라 별도의 쿼리를 수행 할 수 없습니다.

0

순수 MySQL을 사용하고 3 개의 테이블을 가지고 외래 키와 링크하고 JOIN을 사용하여 쿼리 할 수 ​​있습니다. 당신은 그것을 할 수

SELECT * FROM Albums a 
LEFT JOIN Tracks b 
ON a.album_id = b.track_album 
LEFT JOIN Produced c 
on b.track_id = c.produced_track 
LEFT JOIN Artist d 
on c.produced_artist = d.artist_id 
WHERE a.album_id = ? 
0

당신은 MySQL과이를 달성하기 위해 LEFT JOIN을 사용할 수 있습니다 처리 할 수 ​​있습니다 SQL은 집계 함수와 group by 절을 사용합니다.

그것과 같아야합니다. 선택 t * 트랙 t 에서 some_aggregate_function (a.whatever) 는 (t.trac_id = p.produced_id) 는 (p에 대한 아티스트 A를 가입 좌측에 생성 P 가입 떠났다. produced_artist = a.artist_id) 그룹 별 *

0

:

당신은 일을 과부하 PHP가 필요하지 않습니다

, MySQL은 그냥 좋은 :)

관련 문제