我正在制作一个音乐网站,其中将有一个 CMS 来添加新歌曲,访问者可以在新闻源上查看/播放歌曲或按艺术家/歌曲浏览/搜索。从这里开始,歌曲被称为曲目。
数据库如下所示:
轨道
编号 | 标题 | 艺术家 | 年份 | 路径_mp3 | 路径_ogg | 约会时间
艺术家
编号 | 艺术家(我有这张表,因为我想稍后添加其他艺术家信息。)
track2艺术家
track_id | 艺术家 ID
有些曲目有两个或更多的艺术家,这些艺术家每个人都有自己的独奏曲目。因此,我想将这些艺术家保留为单独的实体,以便用户可以相应地浏览它们,但在适用时,显示多个艺术家对同一首歌曲负责。
当我在包含多个艺术家的新闻提要上输出曲目时,我想链接到一个页面,该页面仅抓取两位艺术家贡献的曲目,如果访问者点击其中一位艺术家,则从该页面转到个人艺术家页面。
http://www.discogs.com/search?q=cid+inc+and+victor+hugo&type=all
比如你点击这个链接,选择最上面的搜索结果,就可以看到我要找的效果。艺术家链接在登录页面上是分开的。
我当前的代码得到的是,在 track2artist 表中有多个条目(通过有多个艺术家)的曲目被多次显示。我希望每首曲目只出现一次,但仍然知道是否有多个艺术家,以及他们的 id 是什么。
我已经尝试在 sql 语句的末尾包含“group by tracking.id”,它实际上只选择每个语句一次。但是,这无法在 track2artist 中获取任何多个艺术家 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>