Php MySQL-在输出时获取表上的重复行与关系表连接
我正在制作一个音乐网站,其中将有一个CMS来添加新歌,访问者可以在新闻提要上查看/播放歌曲,或者通过艺术家/歌曲浏览/搜索歌曲。从现在起,歌曲被称为曲目 数据库如下所示: 轨道 id |头衔|艺术家|年份|路径| mp3 |路径| ogg |日期|时间 艺术家 id |艺术家(我有这个表,因为我想稍后添加其他艺术家信息。) 田径运动员 曲目|艺术家| id 有些曲目有两个或两个以上的艺术家,这些艺术家也有各自的独奏曲目。因此,我希望将这些艺术家作为单独的实体,以便用户可以相应地浏览到他们,但在适用的情况下,显示多个艺术家负责同一首歌曲 当我在新闻提要上输出一个包含多个艺术家的曲目时,我想链接到一个页面,该页面只获取两位艺术家都参与的曲目,如果访问者单击其中一位艺术家,则从该页面转到个人艺术家页面 例如,如果您单击此链接并选择顶部搜索结果,您可以看到我正在寻找的效果。艺术家链接在登录页上是分开的 我目前的代码得到的是,在track2artist表中有多个条目的曲目(通过有多个艺术家)会被显示多次。我希望每首曲目只出现一次,但仍然知道是否有多个艺术家,以及他们的ID是什么 我已经尝试在sql语句的末尾包含“groupbytracks.id”,实际上每个语句只选择一次。但是,这无法在track2artist中获取任何多个艺术家id条目,因此当用户单击时,我无法传递这些多个艺术家id 我需要新的SQL语法,还是在我的PHP中?我正在尝试尽可能少的数据库调用,因为我知道这是推荐的 我非常感谢你在这方面的帮助。这可能在其他地方有所涉及,但在搜索时,我在试图理解其他示例时感到相当困惑。感谢您抽出时间阅读此文章Php MySQL-在输出时获取表上的重复行与关系表连接,php,mysql,join,duplicates,Php,Mysql,Join,Duplicates,我正在制作一个音乐网站,其中将有一个CMS来添加新歌,访问者可以在新闻提要上查看/播放歌曲,或者通过艺术家/歌曲浏览/搜索歌曲。从现在起,歌曲被称为曲目 数据库如下所示: 轨道 id |头衔|艺术家|年份|路径| mp3 |路径| ogg |日期|时间 艺术家 id |艺术家(我有这个表,因为我想稍后添加其他艺术家信息。) 田径运动员 曲目|艺术家| id 有些曲目有两个或两个以上的艺术家,这些艺术家也有各自的独奏曲目。因此,我希望将这些艺术家作为单独的实体,以便用户可以相应地浏览到他们,但在适
$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>
$conn=dbConnect('read');
$sql=“SELECT*FROM tracks INNER JOIN track2artist ON tracks.id=track2artist.track_id”;
$result=$conn->query($sql)或die(mysqli_error($conn));
?>
通过
使用DISTINCT
关键字,加入时不会返回重复项
$sql = "SELECT DISTINCT * FROM tracks INNER JOIN track2artist ON tracks.id = track2artist.track_id";
由于在不同的表中有多个作者的歌曲,因此将多次列出曲目。[对于使行不同的每段数据一次] 你想要的是这样的东西
track artist
artist
artist
track artist
artist
track artist
track artist
然而,mysql将只返回完整的行,这意味着对于每一段数据,它将返回一行完整的信息。为了降低查询量,最好在数据库返回信息后对信息进行分组
我会说,与其立即输出,不如将其作为数据库解析循环
<?php
while($track = $result->fetch_assoc()) {
$tracklist[$track['id']]['title'] = $track['title'];
$tracklist[$track['id']]['artists'][$track['artist_id']] = $track['artist'];
}
我刚刚将其复制/粘贴到我的mysql终端中,它返回了多个艺术家的曲目的重复行,我猜是因为艺术家id列不同…:/然后使用艺术家id加入他们。这看起来很有希望。实际上,我刚刚从tracks表中删除了artist列,因为它是多余的。我如何修改我的sql语句以加入到artists表中?明白了:只是在末尾添加了另一个内部连接。现在可以用了。非常感谢您的快速帮助。。。爱栈溢出!