requête de jointure et récupération de données

Eléphant du PHP | 216 Messages

14 mai 2010, 11:11

Bonjour à tous,

j'effectue la requête de jointure suivante qui fonctionne bien :

$sqla = sprintf("SELECT A.id_adh, A.id_vil, B.id_adh, B.id_log, B.description, B.type, C.id_adh, C.continent, C.pays, C.ville, D.id_log, D.up_nom, E.id_vil, E.id_pay, E.ville, F.id_pay, F.id_con, F.pays_fr, G.cont_fr
FROM flatforswap_adherent A
INNER JOIN flatforswap_logement B ON A.id_adh = B.id_adh
INNER JOIN flatforswap_destination C ON A.id_adh = C.id_adh
INNER JOIN flatforswap_photo D ON B.id_log = D.id_log
INNER JOIN flatforswap_ville E ON A.id_vil = E.id_vil
INNER JOIN flatforswap_pays F ON E.id_pay = F.id_pay 
INNER JOIN flatforswap_continent G ON G.id_con = F.id_con
WHERE G.cont_fr= 'Afrique'");
 
$reqa = mysql_query($sqla) or die('Erreur SQL !<br>'.$sqla.'<br>'.mysql_error());
 


cette requête ne concerne qu'un seul adhérent mais il se trouve que cet adhérent à plusieurs destinations.

Mon souci c'est que je ne sais pas récupérer les multiples destinations.

j'ai le même souci pour les photos...

merci d'avance pour votre aide.

Mammouth du PHP | 661 Messages

15 mai 2010, 11:39

ben là tu récupère tout ce qui concerne une destination, et non un utilisateur !...

avant de te lancer dans une requête aussi "chargée" essaye de récupérer les utilisateur puis dans une boucle, tu récupère toutes les destinations qui correspondent à son identifiant !...

sinon, envoi la structure de ta bdd, qu'on y voient mieux ;)

Eléphant du PHP | 216 Messages

15 mai 2010, 13:04

Ben au fait comme je l'explique cette requête ne concerne q'un seul adhérent.

et pour cet adhérent j'effectue une nouvelle boucle :

 
 
// requête sur la table destination
 
$sqld =sprintf("SELECT id_des,continent,pays,ville,autre,date_deb,date_fin FROM flatforswap_destination WHERE id_adh=%s ORDER BY timestamp ASC", quote_smart($id_adh));
$reqd = mysql_query($sqld) or die('Erreur SQL !<br>'.$sqld.'<br>'.mysql_error());
$nbrdes = mysql_num_rows($reqd);
 
if ($nbrdes==0){
 
echo '<div class="rectyy">';
		echo 'Le membre n\'pas choisie de destiantion particulière';
echo '</div>';}
else{
 
		while($datad = mysql_fetch_assoc($reqd))
		{
			// conversion de la date
			$annee1 = substr($datad['date_deb'], 0, 4);
			$mois1 = substr($datad['date_deb'], 5, 2);
			$jour1 = substr($datad['date_deb'], 8, 2);  
					
			$datad['date_deb'] = $jour1 . '-' . $mois1 . '-' . $annee1;
			
			$annee2 = substr($datad['date_fin'], 0, 4);
			$mois2 = substr($datad['date_fin'], 5, 2);
			$jour2 = substr($datad['date_fin'], 8, 2);  
			
			$datad['date_fin'] = $jour2 . '-' . $mois2 . '-' . $annee2;
			
			
			if ($datad['autre'] == 'OK') { 
					echo '<div class="rectyy">';
					echo 'N\'importe où <br />';
					echo 'du '.$datad['date_deb'].' au '.$datad['date_fin'].' <br />';
					echo '</div>';}
			else{
			if ($datad['ville'] == '-1'){ $ville_fr = "";}else{ $ville_fr = $datad['ville'];}
			if ($datad['pays'] == '-1'){ $pays_fr = "";}else{ $pays_fr = $datad['pays'];}
			if ($datad['continent'] == '-1'){ $continent_fr = "";}else{ $continent_fr = $datad['continent'];}
			
			echo '<div class="rectyy">';
			if($ville_fr != ""){
			echo $ville_fr.'<br />';}
			else if($pays_fr != ""){
			echo $ville_fr.'<br />';}
			else{
			echo $continent_fr.'<br />';}
			echo 'du '.$datad['date_deb'].' au '.$datad['date_fin'].' <br />';
			echo '</div>';
				
			}
			}
 
 
 


mais j'ai l'impression que cette boucle je l'effectue pour rien car les résultats sont déjà obtenus dans la première requête.

Eléphant du PHP | 216 Messages

17 mai 2010, 11:21

Bonjour,

je me suis peut-être mal exprimé, mais voilà ce que je fais exactement :

$sqla = sprintf("SELECT A.id_adh, A.id_vil, B.id_adh, B.id_log, B.description, B.type, C.id_adh, C.continent, C.pays, C.ville, D.id_log, D.up_nom, E.id_vil, E.id_pay, E.ville, F.id_pay, F.id_con, F.pays_fr, G.cont_fr
FROM flatforswap_adherent A
INNER JOIN flatforswap_logement B ON A.id_adh = B.id_adh
INNER JOIN flatforswap_destination C ON A.id_adh = C.id_adh
INNER JOIN flatforswap_photo D ON B.id_log = D.id_log
INNER JOIN flatforswap_ville E ON A.id_vil = E.id_vil
INNER JOIN flatforswap_pays F ON E.id_pay = F.id_pay 
INNER JOIN flatforswap_continent G ON G.id_con = F.id_con
WHERE G.cont_fr= 'Afrique'");

$reqa = mysql_query($sqla) or die('Erreur SQL !<br>'.$sqla.'<br>'.mysql_error());

Là je récupère en effet tout ce qui concerne une destination. Mais pour simplifier le problème je me suis arrangé pour qu'il y ait un seul membre qui est logé dans le contient "Afrique".

Ensuite je fais cela

	while($dataa = mysql_fetch_assoc($reqa)){
	$id_adh = $dataa['id_adh'];
        $id_log = $dataa['id_log'];
	

ici je récupère l'id du premier membre (qui l'unique aussi)

je n'ai pas souci lorsque ce membre contient une entrée par table.

mon seul souci c'est quand il y a plusieurs entrées par table.

Par exemple, pour ce membre plusieurs photos lui sont associé.

je sais récupérer un nom de photo :

$dataa['up_nom'], mais je ne sais pas récupérer toutes les photos de cet adhérent...

Je ne sais pas si j'ai été assez clair...

Merci d'avance pour votre aide.