{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 :
$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 &agrave; 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

  1. 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%')
    0