2014-02-18 6 views
0

저는 아티스트, 장르 및 genre_artist 테이블이 3 개인 MySQL 데이터베이스가 있습니다. 특정 장르의 모든 아티스트를 제공하는 MySQL 쿼리가 필요합니다. "바위"라고 말할 수 있습니다. MySQL 테이블에 합류 한 경험이 없으므로 누구든지 나를 도울 수 있습니까?MySQL - 여러 테이블을 결합하는 방법

내 테이블 행은 다음과 같습니다

작가 :

artist_id (int, ai, pk) 
artist_name(varchar) 
artist_image(varchar) 

장르 :

id, (int, ai, pk) 
name (varchar) 
parent_id (int) 

genre_artist :

genre_artist_id (int, ai, pk) 
genre_id (int) 
artist_id (int) 

그래서이 사람이 나를 도울 수 ? 사전에

감사합니다 ...

+1

_I'm 이렇게 가입에 경험하지 (최신 버전 모르는)을 지원하지 않는 _...는 시도 되세요 쿼리를 작성 하시겠습니까? 엄청나게 가까울 수 있기 때문에 시도를 보는 것이 매우 도움이 될 것이며 올바른 결과를 얻으려는 제안 만 있으면됩니다. 귀하가 작성한 모든 시도로 질문을 편집하십시오. – Taryn

답변

0
SELECT artists.* 
FROM artists join genre_artist on genre_artist.artist_id = artists.artist_id 
      join genre  on genre.id = genre_artist.genre_id and genre.name = 'Rock'; 
+0

이것은 실제로 꽤 좋으며 나는이 대답을 받아 들일 것입니다.하지만 각 아티스트의 이름이 표시되고 얼마나 많은 앨범이 있는지, 아티스트가 5 개의 앨범을 가지고 있고 아티스트 이름이 5 번 표시되면 ... 어떻게 그렇게 될수 있니? 나는 앨범 테이블을 가지고 있지만 분명히 그것의 쿼리에 포함되어 있지 않다 ... – SHT

+0

@SHT 내가 쓴 쿼리는 아티스트가 많은 genre_artist 항목을 가지고있을 때만 여러 행을 표시 할 것이다. 나는이 테이블을 가지고 있기 때문에, 당신의 예술가와 장르 사이에 다 대다 관계가 있다고 가정합니다. 따라서 한 아티스트는 여러 장르를 가질 수 있고 한 장르는 많은 아티스트와 관련 될 수 있습니다. 그렇다면 디자인을 통해이 쿼리가 동일한 아티스트에게 여러 번 나타날 수 있습니다. 그것이 당신의 의도가 아니라면 db 디자인을 변경해야 할 것입니다. –

+0

오케이! 고마워요! – SHT

0
SELECT a.* 
FROM 
    `artists` a 
    INNER JOIN `genre_artist` ga ON ga.artist_id = a.artist_id 
    INNER JOIN `genre` g ON g.genre_id = ga.genre_id 
WHERE 
    g.name = 'Rock' 
; 
-1

하자 당신이 데이터베이스에 대한 매우 의도 일 수있다

$genre_id = mysql_real_escape_string($genreId); // basic protection 
$subquery = "SELECT artist_id FROM genre_artist WHERE genre_id = {$genre_id}"; 
$query = "SELECT * FROM artist WHERE artist_id IN ({$subquery})"; 

조인 하위 쿼리를 사용할 수 있습니다, 당신은 $genreId에서 바위의 ID를 말한다. 올바른 인덱스를 추가하고 잘못된 모드에서 thge 테이블을 가지고 있지 않다면, 필요 이상으로 긴 테이블을 잠글 수있어 성능이 저하됩니다. 작은 참고 : 하위 쿼리 덜 가능성이, MySQL의 이전 버전이

+0

나는 이것이 조인보다 더 나은 시나리오를 상상할 수 없기 때문에 당신을 다운 투표하고 있습니다. 솔직히 말해서, 이것은 정말로 나쁜 조언처럼 읽습니다. –

관련 문제