8791 sujets

Développement web côté serveur, CMS

Bonjour à vous ,

Voila , j'ai créer un page général pour donner des infos sur les albums photo de mon site .
mais j'ai un problème , je souhaite récupéré les nom,prénom des membre associer a l'album en question .

pour cela je dois faire comme une boucle , mais pour le moment je n'y arrive pas .

j'ai fais une petit image pour m'aider a imaginer le code mais sans grand résulta .

Image en question.
upload/31555.png

actuellement mon appel sql et :

SELECT * FROM album AS album, client AS client, marquage_album WHERE album.membre=client.ID_client


Merci d'avance de vos aides .
Modifié par SNXeurope (23 Dec 2010 - 13:49)
Salut,

hem... je ne comprends pas grand chose à ton schéma et ta requête est un peu étrange :
* le AS ne sert que pour spécifier un alias et il est donc inutile si c'est pour redonner le même nom
* il ne sert à rien de préfixer le nom des champs avec le nom des tables s'il sont uniques

Quoi qu'il en soit il me semble que l'idéal serait de revoir les bases de sql : http://sqlpro.developpez.com/
bonsoir,

Du peu que je peux comprendre de ton image y a un gros problème d'analyse au niveau de la base de donnée...

Faut penser relation...

Tu as une table album, a cet album on peut rattacher plusieurs clients..

on a donc une relation 1,n

donc dans ta table client tu positionne l'id_album

tu pourra avoir ce genre d'enregistrement

TABLE ALBUM

id_album = 1
titre_album = "toto se promène"

TABLE CLIENT

id_auto = 1
id_album = 1
nom
prenom

id_auto =2
id_album = 1
nom
prenom

etc


et la requète serait la suivante



select * from CLIENT where id_album = 1


ça te ressortira tout les clients correspondant à l'album en cours...
je complète si un meme client peut être présent pour plusieurs album dans ces cas là il te faut une table spécifique de relation dans laquelle tu retrouvera

un id_auto
l'id_album
l'id_client

le tout ressortant avec les jointures
Je viens de tester avec des JOIN mais sa m'affiche que 1 résulta et non pas tout les résulta = a la donner


SELECT * FROM album 
JOIN client 
ON membre = ID_client 
JOIN marquage_album
ON ID_client LIKE  membre_album



Quand pour l'album 1 il devais avoir 2 client et pareille pour le 2
Modifié par SNXeurope (23 Dec 2010 - 13:41)
Pas sûr que tu aies bien compris l'utilité de RIGHT OUTER JOIN.

Quoi qu'il en soit on ne pourra pas t'aider tant que tu ne nous auras pas donné la structure des tables et quelques explications sur le fonctionnement. Smiley cligne
oui tout a fais d'accord Smiley sweatdrop .

Parti Appel des basse

<?php
/* Contenue Album */
$reponse = $bdd->query ('SELECT * FROM album JOIN client ON membre = ID_client JOIN marquage_albumON membre_album = ID_client');
while ($donnees = $reponse->fetch())
{
if(isset($donnees['nom'])) 		{ $nom_album = $donnees['nom']; } else { $nom_album = 'Titre Album Incconue'; }
if(isset($donnees['lieu'])) 	{ $lieu_album = '<br><span class="bold" >Lieu :</span> '.$donnees['lieu'].' '; }
if(isset($donnees['ville']))	{ $ville_album = '<br><span class="bold" >Ville :</span> '.$donnees['ville'].' '; }
if(isset($donnees['date'])) 	{ $date_album = '<span class="date" ><span class="bold" >Date :</span> '.$donnees['date'].' </span>'; }
/* miniature */
if($donnees['Avatar_client'] == NULL)
	{
	$lien = 'http://localhost/design/no_photo_64.png';
	}
	else
	{
	$lien = 'http://localhost/miniature/'.$donnees['Avatar_client'].'';
	}
/* Photo and Video */
if(isset($donnees['contenu'])) 
	{
		if( $donnees['contenu'] == 0 ) { $contenu_album = "<br><span class='bold' >Photos :</span> 151<br><span class='bold' >Vidéos :</span> 10"; }
		if( $donnees['contenu'] == 1 ) { $contenu_album = "<br><span class='bold' >Photos :</span> 151"; }
		if( $donnees['contenu'] == 2 ) { $contenu_album = "<br><span class='bold' >Vidéos :</span> 10"; }
	}
/* Categorie */
if(isset($donnees['categorie'])) 
	{
		if( $donnees['categorie'] == 0 ) { $categorie_album = '<span class="bold" >Catégorie :</span> Fête </span>'; }
		if( $donnees['categorie'] == 1 ) { $categorie_album = '<span class="bold" >Catégorie :</span> Soirée </span>'; }
		if( $donnees['categorie'] == 2 ) { $categorie_album = '<span class="bold" >Catégorie :</span> Sortie </span>'; }
		if( $donnees['categorie'] == 3 ) { $categorie_album = '<span class="bold" >Catégorie :</span> Autre </span>'; }
		if( $donnees['categorie'] == 4 ) { $categorie_album = '<span class="bold" >Catégorie :</span> Retouchée </span>'; }
	}

?>
<div ID="miniature" style="background:url(<?php echo $lien; ?>) top center no-repeat;" ><img src="design/cadre_miniature.png" title="<?php echo $donnees['Prenom_client']; ?> <?php echo $donnees['Nom_client']; ?>" ></div>
			
	<a href="sk=album&" >
	
		<div ID="corp_haut" >
			<span class="titre" ><?php echo $nom_album; ?>.</span>
			<span class="aime" >[Indisponible] J'aime</span>
		</div>
		
		<div ID="corp_centre" >
			<img src="http://localhost/Photo/1499.JPG" title="" alt="" class="photo_album" >
				<p>
				<?php echo $lieu_album; ?>
				<?php echo $ville_album; ?>
				<?php echo $contenu_album; ?>
				</p>
				
				<p class="width" >
				<span class="bold" >Sur Cette Albums :</span><br> <!-- Appel qui posse problème -->
				</p>
				
		</div>
		
		<div ID="corp_bas" ><span class="categorie" ><?php echo $categorie_album; ?><?php echo $date_album; ?></span></div>
	</a>
<?php } ?>


Contenu bdd :
Modifié par SNXeurope (23 Dec 2010 - 13:49)
Bon alors quelques remarques :

Niveau BDD :
* à partir du moment où tu as un identifiant unique (ID_album, ID_client) il est inutile d'en ajouter un autre (ID_auto) : du coup on ne comprend pas trop pourquoi l'ID_client commence à 0 et où est passé le 2.

Niveau PHP :
* à partir du moment où tu effectues une requête les champs spécifiés après le SELECT (ou tous si tu fais SELECT *) seront disponibles donc il est inutile de tester leur existence avec if(isset
* plutôt que de faire une liste de if($variable == xxx) tu devrais regarder du côté des tableaux.
* évite de mettre des URI commençant par http://localhost car une fois le site en ligne ça ne fonctionnera pas. Il vaut mieux dans ce cas mettre des chemins en relatif ou commençant par la racine (cf. cette astuce).

Concernant ta question je vais supposer que :
* chaque album est créé par un et un seul membre (qui appartient à la table Client).
* chaque album est "associé" à 1 ou plusieurs membres (qui appartiennent à la table Client).
* cette association correspond à la table Marquage_album.

Donc pour récupérer la liste des membres associés à un album donné (le 1 dans l'exemple) :
Select Nom_Client, Prenom_Client From Client Join Marquage_album On ID_client = Membre_album 
Where album_album = 1
Bon j'ai le résulta voulue , sur une page a par .

Question es que faire une boucle pour pouvoir faire plusieurs appel bdd et politiquement correcte ?
(un petit effort sur l'orthographe serait le bienvenu. A ce sujet ce n'est pas "Sur Cette Albums" mais "Sur Cet Album" Smiley murf ).
SNXeurope a écrit :
Question es que faire une boucle pour pouvoir faire plusieurs appel bdd et politiquement correcte ?
Oui :
* soit parce qu'on ne peut pas récupérer tous les résultats en une seule requête.
* soit parce que la charge du serveur est moins importante en faisant plusieurs requêtes.
* soit parce que cela simplifie la relecture du code ou la "logique" utilisée.

Tout dépend des cas.

Lire également http://sqlpro.developpez.com/cours/optimiser/

Edit: à noter toutefois qu'en général on essaie d'effectuer le moins de requêtes possibles car c'est ce qui augmente le plus la charge du serveur.
Modifié par Heyoan (06 Aug 2010 - 13:21)