2011-07-14 30 views
-3

可能重複:
Mysql single query join 3 table and get all the results我想要得到的所有結果使用單查詢加盟3臺

嗨,我想列出所有歌曲的專輯,我想列出所有例如,單個歌曲的藝術家見下面。

1. Song Title 1 
    - Artist 1, Artist 2, Artist 3 note:(all this individual artist have link to there artist page) 
2. Song Title 2 
    - Artist 1, Artist 2 
3. Song Title 3 
    - Artist 1, Artist 2, Artist 3 

我的表是歌曲,專輯,藝術家,song_artist

歌曲表

+----+-----------+----------+ 
| id | song_name | album_id | 
+----+-----------+----------+ 
| 1 | Title 1 | 2  | 
| 2 | Title 2 | 2  | 
| 3 | Title 3 | 2  | 
+----+-----------+----------+ 

專輯表

+----+------------+ 
| id | album_name | 
+----+------------+ 
| 1 | Album 1 | 
| 2 | Album 2 | 
| 3 | Album 3 | 
+----+------------+ 

藝術家表

+----+-------------+ 
| id | artist_name | 
+----+-------------+ 
| 1 | Artist 1 | 
| 2 | Artist 2 | 
| 3 | Artist 3 | 
+----+-------------+ 

song_artist表

+--------+--------------+---------+ 
| id  | song_is  |artist_id| 
+--------+--------------+---------+ 
| 1  | 1   | 1  | 
| 2  | 1   | 5  | 
| 3  | 1   | 3  | 
| 4  | 2   | 3  | 
| 5  | 2   | 1  | 
| 6  | 3   | 2  | 
| 7  | 3   | 1  | 
+--------+--------------+---------+ 

這是我當前的代碼。

$id =$_GET['id']; *// Get album id from url* 
$query = "SELECT id, song_name, FROM song WHERE album_id = '".$id."'"; 
$result = mysql_query($query) or die("h".mysql_error()); 
while($song = mysql_fetch_assoc($result)){ 
echo $song['song_name']; 
$result1 = mysql_query("SELECT artist.artist_name as artist_name, artist.id as aid 
FROM artist 
INNER JOIN song_artist 
ON artist.id = song_artist.artist_id 
WHERE song_artist.song_id = '".$song['id']."' "); 
while($row = mysql_fetch_array($result1)){ 
echo "<a href='".$row['sid']."'>".$row['artist_name']."</a>, "; 
} 
} 

我該如何編寫mysql單個查詢來獲取php中的所有結果?

非常感謝您的幫助。

James。

好吧現在我得到了我想要的結果,感謝每一個。

$query = "select s.id song_id, s.song_name, group_concat(art.artist_name) artname, a.id 
     from song s 
     left outer join album a on a.id = s.album_id 
     left outer join song_artist sa on sa.song_id = s.id 
     left outer join artist art on art.id = sa.artist_id 
     WHERE a.id= '".$id."' 
     GROUP BY song_id"; 
+1

你怎麼知道哪些歌曲在哪個專輯? –

+0

我正在使用$ _GET ['id'];方法來獲取相冊ID從url – James

+3

這是您以前的帖子的確切副本:http:// stackoverflow。com/questions/6682386/mysql-single-query-join-3-table-and-get-all-the-results – jworrin

回答

1

使用查詢:

select s.id song_id, s.song_name, a.album_name, art.artist_name 
from song s 
left outer join album a on a.id=s.album_id 
left outer join song_artist sa on sa.song_id=s.id 
left outer join artist art on art.id=sa.art_id 
where <INSERT WHERE-CLAUSE HERE> 

你會得到這樣的結果:

+--------+-----------+------------+-------------+ 
| song_id|song_name | album_name | artist_name | 
+--------+-----------+------------+-------------+ 
| 1  | Title 1 | Album 2 | Artist 1 | 
| 1  | Title 1 | Album 2 | Artist 5 | 
| 1  | Title 1 | Album 2 | Artist 3 | 
| 2  | Title 2 | Album 2 | Artist 3 | 
| 2  | Title 2 | Album 2 | Artist 1 | 
| 3  | Title 3 | Album 2 | Artist 2 | 
| 3  | Title 3 | Album 2 | Artist 1 | 
+--------+-----------+------------+-------------+ 

因此必須迭代每一個ng id從結果中獲取每首歌曲的顯示信息。因爲你只用一個查詢就可以做到這一點,所以當一首歌曲有多位藝術家時,你會得到重複的歌曲和專輯名稱,但這是你爲簡潔而付出的代價。

UPDATE:

或者您也可以使用ARTIST_NAME作爲GROUP_CONCAT建議Eljakim如果你不會使用藝術家信息任何東西,除了級聯顯示列表。

+0

此代碼得到什麼,我想感謝你的幫助的結果。$查詢=「選擇s.id song_id,s.song_name,GROUP_CONCAT(art.artist_name)artname,A.ID從首歌中 \t \t左外 \t \t上a.id = s.album_id \t \t左外連接專輯聯接song_artist SA上sa.song_id = s.id \t \t左外上art.id = sa.artist_id \t \t WHERE a.id加入藝術家的藝術='「。$ id。」' \t \t GROUP BY song_id \t \t「;」 – James

+0

@James Glad我可以協助:) – Briguy37

+0

'$ query =「select s.id song_id,s.song_name,group_concat(art.artist_name)artname,a.id from song's left outer join album a on a.id = s .album_id left外部連接song_artist sa sa.song_id = s.id left外部連接藝術家藝術art.id = sa.artist_id WHERE a.id ='「。$ id。」'GROUP BY song_id「;' – James

1

這可以讓你的歌曲+藝人專輯1.

SELECT song_name, group_concat(artist_name) 
FROM song 
LEFT JOIN song_artist ON song.id=song_artist.song_id 
LEFT JOIN artist ON song_artist.artist_id=artist.id 
WHERE song.album_id=1 
+0

它給了我錯誤'where子句'中的未知列'album.id' – James

+0

你的'group_concat'幫助我解決了這個問題。 – James

相關問題