problème de requete [jointure]

Mammouth du PHP | 601 Messages

20 août 2006, 16:56

Bonjour,
Ma requette me semble bonne, ce n'est pas un warning mais dans la construction que j'aurrai besoin de conseil ?
http://creatif-web.be/anaska/projet/catalogue.php
Je veux boucler tous les champs demander, mais j'ai justement des alias ou répétition des lignes, je n'ai que deux enregistrements et il m'en affiche 100 ?
Le premier déconne parceque j'ai mis une boucle
$requete="SELECT couleur, url_photo, nom_modele, nom_marque, nom_modele, annee, prix_ht, poids, echelle FROM voiture, modele, marque_voiture";
$resultat=mysql_query($requete, $lien) or die (mysql_error());
$i=0;
if($categorie=="couleur") {
	while($affiche_tout=mysql_fetch_array($resultat)) {
	print "Voici se que donne votre recherche par couleur :<span class='rouge'>".$affiche_tout['couleur'].'</span><br />';
	print '<br /><p><img src='.$affiche_tout['url_photo'].' /></p>'; }
	} 
le reste ne boucle pas par contre ?
elseif($categorie=="voiture") {
	$ligne=mysql_fetch_array($resultat);
	print "Voici se que donne votre recherche par nom:
	<span class='rouge'><br />".$ligne['nom_modele'].'</span>';
	print '<p><img src='.$ligne['url_photo'].' /></p>'; 
	}
elseif($categorie=="marque") {
	$ligne=mysql_fetch_array($resultat);
	print "Voici se que donne votre recherche par marque:
	<span class='rouge'><br />".$ligne['nom_marque'].'</span>';
	print '<p><img src='.$ligne['url_photo'].' /></p>'; 
	}
elseif($categorie=="modele") {
	$ligne=mysql_fetch_array($resultat);
	print "Voici se que donne votre recherche par modèle:
	<span class='rouge'><br />".$ligne['nom_modele'].'</span>';
	print '<p><img src='.$ligne['url_photo'].' /></p>'; 
	}
elseif($categorie=="prix") {
	$ligne=mysql_fetch_array($resultat);
	print "Voici se que donne votre recherche par prix:
	<span class='rouge'><br />".$ligne['prix_ht'].' €</span> (les prix s\'entendent hors taxe)';
	print '<p><img src='.$ligne['url_photo'].' /></p>'; 
	}
elseif($categorie=="annee") {
	$ligne=mysql_fetch_array($resultat);
	print "Voici se que donne votre recherche par année:
	<span class='rouge'><br />".$ligne['annee'].'</span>';
	print '<p><img src='.$ligne['url_photo'].' /></p>'; 
	 }
elseif($categorie=="poids") {
	$ligne=mysql_fetch_array($resultat);
	print "Voici se que donne le poids de toutes nos voitures:
	<span class='rouge'><br />".$ligne['poids'].'</span>';
	print '<p><img src='.$ligne['url_photo'].' /></p>';
	 }	
elseif($categorie=="echelle") {
	$ligne=mysql_fetch_array($resultat);
	print "L'echelle est en pourcentage:
	<span class='rouge'><br />".$ligne['echelle'].' Kg</span>';
	print '<p><img src='.$ligne['url_photo'].' /></p>';
	 }	  		
 else {  
 echo "<div class=\"nouveau_resultat\"><a href='http://creatif-web.be/anaska/projet/catalogue.php' title='faite une nouvelle recherche'>Souhaittez vous faire une autre recherche ?</a></div>";
		exit();
}
 if(!mysql_query($requete, $lien)) {
	$erreurbdd=mysql_error();
	echo $erreurbdd;
	return false;
	}
	else {
	return true;
	}
Merci de votre aide.
Modifié en dernier par artotal le 20 août 2006, 19:55, modifié 1 fois.
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

Mammouth du PHP | 601 Messages

20 août 2006, 17:36

J'ai essayer cette syntaxe sa me renvoie toujours plus de donner que ce qui se trouve dans la table ?
$requete="SELECT couleur, url_photo, nom_modele, nom_marque, nom_modele, annee, prix_ht, poids, echelle FROM voiture, modele, marque_voiture ORDER BY nom_modele  DESC LIMIT 20";
$resultat=mysql_query($requete, $lien) or die (mysql_error());
	if($categorie=="couleur") {
	while($affiche_tout=mysql_fetch_assoc($resultat)) {
	$couleur=$affiche_tout['couleur'];
	$url_photo=$affiche_tout['url_photo'];
echo "<a href='http://creatif-web.be/anaska/projet/resultat.php?couleur=$couleur'><br />$couleur</a>";
echo "<a href='http://creatif-web.be/anaska/projet/resultat.php?url_photo=$url_photo'><br />$url_photo</a>";	
	}
	}
Sa me multiplis les résultats, je ne comprend pas pk ?
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

20 août 2006, 17:46

Salut,
Rien que pour toi un tout nouveau mini-tuto sur les jointures c'est à dire des requêtes sur plusieurs tables en même temps.

Ici tu as un beau produit cartésien (répétition avec chaque valeur sur chaque table) d'où le grand nombre de résultat.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 601 Messages

20 août 2006, 19:34

Petit tuto sympas ;)
Par contre si j'ai bien compris !
j'ai une requete vide, avec ce message d'erreur
Query was empty
Pour le voir on peux cliquer http://creatif-web.be/anaska/projet/catalogue.php
sur voiture ou couleur de la liste de mon formulaire.
Ce qui me laisse perplexe ?
$requete1="SELECT nom_modele, url_photo FROM modele AS e, voiture AS t WHERE e.id_modele = t.id_modele";
$resultat=mysql_query($requete1, $lien) or die (mysql_error());
	if($categorie=="voiture") {
	while($affiche_tout=mysql_fetch_assoc($resultat)) {
	$nom_modele=$affiche_tout['nom_modele'];
	$url_photo=$affiche_tout['url_photo'];
	echo $nom_modele.'<br />';
	echo "<img src=".$url_photo." /><br />"; 
	}
	}	
Encore merci.
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

ViPHP
ViPHP | 2144 Messages

20 août 2006, 20:52

Tu as un tutorial dans la faq, sur comment débuggé les problèmes d'accès aux bases de données: (Tests ta requêtte dans phpMyAdmin)
Mais pour un résultat d'un select vide, on ne peut pas beaucoup t'aider, n'ayant pas le contenu de la base de donnée sous la main.

Mammouth du PHP | 601 Messages

20 août 2006, 20:56

je pense que sa ne return pas false mais renvoie un champs vide quand la boucle s'arrette ?
Ou la jointure atta encore des résultat ?
Modifié en dernier par artotal le 20 août 2006, 21:31, modifié 1 fois.
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

ViPHP
ViPHP | 2144 Messages

20 août 2006, 21:00

je pense que sa ne return pas false mais renvoie un champs vide quand la boucle s'arrette ?
As-tu tester ton select dans phpMyAdmin, comme conseilllé plus haut ?
La rêgle de base en programmation, c'est d'isoler les problèmes, en utilisant phpMyAdmin, tu testes en dehors de ton code php et tu peux donc savoir si c'est la requette qui foire, ou bien le code php, et surtout avoir une vue d'ensemble de ce que le serveur mysql te renvoit.

Mammouth du PHP | 601 Messages

20 août 2006, 21:34

Je viens de tester sa, et c'est bien le résultat que j'atta quil affiche ?
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 août 2006, 19:38

Vérifie l'orthographe pour les variables contenant la ou les requêtes et l'exécution avec mysql_query...

D'après le message tu essaies d'exécuter une requête (variable) non initialisée.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 601 Messages

21 août 2006, 23:19

là je ne comprend pas :

Code : Tout sélectionner

SELECT couleur, url_photo FROM voiture ORDER BY couleur DESC LIMIT 20Query was empty
pourtant sa m'affiche deux résultat je ne comprend pas la raison, le code :
$requete0="SELECT couleur, url_photo FROM voiture ORDER BY couleur DESC LIMIT 20";
echo '<br /><br /><br /><br /><br /><br />'.$requete0;
$resultat0=mysql_query($requete0, $lien) or die (mysql_error());
	if($categorie=="couleur") {
	while($affiche_tout=mysql_fetch_assoc($resultat0)) {
	$couleur=$affiche_tout['couleur'];
	$url_photo=$affiche_tout['url_photo'];
	echo $couleur.'<br />';
	echo "<img src=".$url_photo." /><br />";
	}
	}
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

Mammouth du PHP | 601 Messages

21 août 2006, 23:26

Sa y est j'ai compris
j'avais laisser trainé un test sur la base avec une variable $requete non initialisé.
Encore merci truc ;)
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"