2 votes

Mysql requête unique joindre 3 tables et obtenir tous les résultats

Bonjour, je veux lister toutes les chansons de l'album et je veux lister tous les artistes pour chaque chanson individuelle, voir ci-dessous pour un exemple.

1. Titre de la chanson 1
   - Artiste 1, Artiste 2, Artiste 3    note: (tous ces artistes individuels ont un lien vers leur page d'artiste)
2. Titre de la chanson 2
   - Artiste 1, Artiste 2
3. Titre de la chanson 3
   - Artiste 1, Artiste 2, Artiste 3

Mes tables sont chanson, album, artiste, chanson_artiste

table chanson

+----+-----------+----------+
| id | nom_chanson | id_album |
+----+-----------+----------+
| 1  | Titre 1     | 2        |
| 2  | Titre 2     | 2        |
| 3  | Titre 3     | 2        |
+----+-----------+----------+

table album

+----+------------+
| id | nom_album   |
+----+------------+
| 1  | Album 1     |
| 2  | Album 2     |
| 3  | Album 3     |
+----+------------+

table artiste

+----+-------------+
| id | nom_artiste |
+----+-------------+
| 1  | Artiste 1   |
| 2  | Artiste 2   |
| 3  | Artiste 3   |
+----+-------------+

table chanson_artiste

+--------+--------------+---------+
| id     | id_chanson   |id_artiste|
+--------+--------------+---------+
| 1      | 1            | 1       |
| 2      | 1            | 5       |
| 3      | 1            | 3       |
| 4      | 2            | 3       |
| 5      | 2            | 1       |
| 6      | 3            | 2       |
| 7      | 3            | 1       |
+--------+--------------+---------+

Voici mon code actuel.

$id =$_GET['id']; *// Récupérer l'id de l'album à partir de l'URL*
$query = "SELECT id, song_name, FROM song WHERE album_id = '".$id."'";
$result = mysql_query($query) or die("h".mysql_error());
while( $song = mysql_fetch_assoc($result)){
echo $song['song_name'];
$result1 = mysql_query("SELECT artist.artist_name as artist_name, artist.id as aid
FROM artist
INNER JOIN song_artist
ON artist.id = song_artist.artist_id
WHERE song_artist.song_id = '".$song['id']."' ");
while($row = mysql_fetch_array($result1)){
echo "".$row['nom_artiste'].", ";
}
}

Comment puis-je écrire une seule requête mysql pour obtenir tous les résultats en php?

Merci pour votre aide à l'avance.

James.

D'accord, maintenant j'ai obtenu le résultat que je voulais, merci à tous.

$query = "select s.id id_chanson, s.nom_chanson, group_concat(art.nom_artiste) nom_artiste, a.id
        from chanson s 
        left outer join album a on a.id = s.id_album
        left outer join chanson_artiste sa on sa.id_chanson = s.id
        left outer join artiste art on art.id = sa.id_artiste
        WHERE a.id= '".$id."'
        GROUP BY id_chanson";

1voto

estani Points 716
SÉLECTIONNEZ s.nom_de_la_chanson, a.nom_de_l'artiste, al.nom_de_l_album
DE artiste a
LEFT JOIN song_artist sa ON sa.artist_id = a.id
LEFT JOIN chanson s ON s.id = sa.song_id
LEFT JOIN album al ON al.id = s.album_id

Plus d'informations sur JOIN

1voto

Eljakim Points 3815

Cela vous donne les chansons + artistes pour l'album 1.

SÉLECTIONNEZ nom_de_la_chanson, group_concat(nom_de_l'artiste) 
DEPUIS chanson 
LEFT JOIN chanson_artiste ON chanson.id=chanson_artiste.identifiant_chanson 
LEFT JOIN artiste ON chanson_artiste.identifiant_artiste=artiste.identifiant 
OÙ chanson.identifiant_album=1

Notez que vous avez également répondu à cette question ailleurs.

0voto

Ovais Khatri Points 1531
Sélectionnez s.song_name, art.artist_name, a.album_name from Song
rejoindre song_artist sa sur sa.Song_id = s.Song_id
rejoindre Album a sur a.album_id = s.Album_id
rejoindre Artist art sur art.id = sa.artist_id

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X