新しい曲を追加するためのCMSがある音楽サイトを作成しています。訪問者はニュースフィードで曲を表示/再生したり、アーティスト/曲で閲覧/検索したりできます。以降、曲をトラックと呼びます。
データベースは次のようになります。
トラック
id | タイトル| アーティスト| 年| path_mp3 | path_ogg | 日付時刻
アーティスト
id | アーティスト(後でアーティスト情報を追加したいので、このテーブルがあります。)
track2artist
track_id | Artist_id
一部のトラックには2人以上のアーティストがいて、それらのアーティストにはそれぞれ独自のソロトラックもあります。したがって、ユーザーがそれに応じてそれらを参照できるように、これらのアーティストを別々のエンティティとして保持したいと思いますが、該当する場合は、複数のアーティストが同じ曲を担当していることを示します。
複数のアーティストがいるニュースフィードにトラックを出力する場合、両方のアーティストが貢献したトラックのみを取得するページにリンクし、そのページから、訪問者がアーティストの1つをクリックすると、に移動します。個々のアーティストのページ。
http://www.discogs.com/search?q=cid+inc+and+victor+hugo&type=all
たとえば、このリンクをクリックして上位の検索結果を選択すると、私が探している効果を確認できます。アーティストのリンクは、ランディングページで個別に表示されます。
現在のコードで得ているのは、track2artistテーブルに複数のエントリがあるトラック(複数のアーティストがいることによる)が複数回表示されていることです。各トラックを1回だけ発生させたいのですが、複数のアーティストがいるかどうか、およびそのIDが何であるかをまだ把握しておいてください。
sqlステートメントの最後に「groupbytracks.id」を含めてみましたが、実際には各ステートメントが1回だけ選択されます。ただし、これは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>