我正在制作一个音乐网站,其中将有一个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。现在得到这个工作。非常感谢您的快速帮助...爱堆栈溢出! –