{MySQL} Jointure 3 tables
Bonjour à toutes et à tous,
J'ai pour objectif de rechercher dans une base de donnée un artiste et ensuite d'afficher les albums qu'il a crée puis les chansons contenues par ce même album :
Voici mes tables :
Artistes : id.artistes ,nom, prenom
Albums : id_albums, nom_albums, id_artistes
Chansons id_chansons, Titre, id_albums
Voici ma requete :
Erreur sur le mysql_fetch_array donc je presume que ma requete est mauvaise.
Une aide serait la bienvenue,
Cdlt, deletMe
J'ai pour objectif de rechercher dans une base de donnée un artiste et ensuite d'afficher les albums qu'il a crée puis les chansons contenues par ce même album :
Voici mes tables :
Artistes : id.artistes ,nom, prenom
Albums : id_albums, nom_albums, id_artistes
Chansons id_chansons, Titre, id_albums
Voici ma requete :
$select = "SELECT * FROM Artistes WHERE nom LIKE '%$Recherche%' OR prenom
LIKE '%$Recherche%'";
$result = mysql_query($select,$connexion)
or die('requete =>'.$select.'<br> error->'.mysql_error());
$compte = mysql_num_rows(mysql_query($select));
if($compte>0) {
$marequete = "SELECT * FROM Artistes WHERE nom LIKE '%$Recherche%' OR prenom
LIKE '%$Recherche%' IN (AND JOIN Albums ON Artistes.id_artistes=Albums.id_artistes AND JOIN Chansons
ON Albums.id_albums=Chansons.id_albums)";
$resultat = mysql_query($marequete,$connexion);
while($ligne = mysql_fetch_array($resultat))
{
echo "<tr> <td>".$ligne['nom']."</td> <td>" .$ligne['prenom']."</td></tr>";
};
}
else{
echo "<br> Aucun Artiste ne correspond à votre recherche";
}
Erreur sur le mysql_fetch_array donc je presume que ma requete est mauvaise.
Une aide serait la bienvenue,
Cdlt, deletMe
Configuration: Windows XP Firefox 3.5.5
5 réponses
-
Salut
qqes précisions sur les alias : on est qqes fois un peu fiu de tout taper à la main. alors quand les noms des tables font des kilomètres (genre 4 car ou plus), il peut être utile à la clarté du code de mettre des alias sur les tables.
Dans la requête, j'ai pas envie de taper plein de fois Artistes. Pas non plus envie pour Albums. Encore moins pour Chansons. Je vais donc mettre des alias sur ces tables pour les manipuler dans la requête uniquement à travers leurs alias. Pour Artistes, l'alias sera i. Chaque fois que, dans la requête, je voudrais utiliser Artistes., je mets i. et ça vaut pareil ! Ensuite j'alias Albums avec a => a. signifie Albums. et idem pour Chansons avec t => t. signifie Chansons.
SELECT i.*, a.*, t.*
FROM Artistes i
LEFT INNER JOIN Albums a ON i.id_artistes=a.id_artistes
LEFT INNER JOIN Chansons t ON a.id_albums=t.id_albums
WHERE (nom LIKE '%$Recherche%' OR prenom LIKE '%$Recherche%')