我正在製作一個音樂網站,其中將有一個CMS添加新歌曲,訪問者可以在新聞Feed中查看/播放歌曲或瀏覽/按藝術家/歌曲搜索。歌曲從這裏被稱爲曲目。MySQL - 獲取重複表格在輸出時加入關係表
數據庫如下所示:
軌道
ID |標題|藝術家|年| | path_mp3 | path_ogg |日期時間
藝術家
ID |藝術家(我有這個表,因爲我想將來添加更多的藝術家信息。)
track2artist
track_id | artist_id
有些曲目有兩個或兩個以上的藝術家,這些藝術家每個都有自己的獨奏曲目。因此,我希望將這些藝術家保持爲獨立的實體,以便用戶可以相應地瀏覽他們,但在適用的情況下,會顯示多位藝術家對同一首歌曲負責。
當我在具有多個藝術家的新聞Feed中輸出曲目時,我想鏈接到只抓取兩位藝術家貢獻的曲目的頁面,並且如果訪問者點擊其中一位藝術家,去個別藝術家頁面。
http://www.discogs.com/search?q=cid+inc+and+victor+hugo&type=all
例如,如果你點擊這個鏈接並選擇頂部的搜索結果,你可以看到我在尋找的效果。藝術家鏈接在着陸頁上是分開的。
我用我當前的代碼得到的是,track2artist表中有多個條目的軌道(通過具有多個藝術家)正在多次顯示。我希望每首歌都只出現一次,但是如果有多位藝術家,以及他們的ID是什麼,它仍然是衆所周知的。
我曾嘗試在sql語句的末尾包括「group by tracks.id」,它實際上只選擇一次每條語句。然而,這並沒有選取track2artist中的多個artist_id條目,所以當用戶點擊時我無法傳遞這些多個藝術家ID。
我需要新的SQL語法,還是在我的PHP?我試圖擺脫儘可能少的數據庫調用,因爲我知道這是推薦的。
我欣賞這方面的任何幫助。這可能在其他地方有所涉及,但在搜索時,我在試圖理解其他示例時感到困惑。感謝您抽時間閱讀。
$conn = dbConnect('read');
$sql = "SELECT * FROM tracks INNER JOIN track2artist ON tracks.id = track2artist.track_id";
$result = $conn->query($sql) or die (mysqli_error($conn));
?>
<table id="feed">
<?php
while($track = $result->fetch_assoc()) {
?>
<tr>
<td><a href="javascript:;" id="playlist-add-track-id-<?php echo $track['id']; ?>">
<img src="/assets/img/add_track.gif" class="add_track_icon"></a></td>
<td><?php echo $track['title']; ?> by <a href="/?page=artist&artist_id=<?php echo $track['artist_id']; ?>">
<?php echo $track['artist']; ?></a></td>
</tr>
<?php } ?>
</table>
這看起來很有希望。其實我只是從軌道表中刪除了藝術家專欄,因爲它是多餘的。我如何修改我的sql語句以加入到藝術家表中? –
明白了:剛剛在最後加入了另一個INNER JOIN。現在得到這個工作。非常感謝您的快速幫助...愛堆棧溢出! –