aodot Posté 28 Août 2007 Posté 28 Août 2007 (modifié) Un gros problème sur lequel je m'arrache les cheveux depuis plusieurs jours. Je voux explique, je crée un site pour ami qui vend des maisons. Les maisons sont gérés par l'intermédiaire d'une base de donnée MYSQL. J'ai une table VILLE : un champ id et un champ ville et une table OFFRE : un champ id, un champ id_ville etc. Le champ id_ville de la table OFFRE est le même que le champ id de la table VILLE. Je récupère le nom de la ville par rapport au champ id_ville. Cependant je dois réaliser un tri par ville de la liste des maisons et la ça commence à être compliqué. Voila en gros le code que j'ai tapé et ça marche pas. <?PHP$select_town = mysql_query("SELECT offre.ville, ville.ville, ville.id FROM offre LEFT JOIN ville ON offre.ville = ville.id ORDER BY ville.ville")or die(mysql_error());$select = "SELECT * FROM offre WHERE categorie='$categorie' AND type='$type' ORDER BY '$donnees_town[ville]' ASC limit $limite,$nombre";$result = mysql_query($select) or die ('Erreur : '.mysql_error() ); while ($donnees = mysql_fetch_array($result) ){$sql2 = "SELECT * FROM immo_ville WHERE id='$donnees[ville]'";$sql2 = mysql_query($sql2) or die (mysql_error());$result2=mysql_fetch_array($sql2);echo "$result2[ville]<br>";echo "$donnees[localisation]<br>"echo "$donnees[description]";}?> IL y a certainement un problème dans la requ$ete mais je ne trouve rien. Voyez vous querlque chose de louche ? Merci par avance. Modifié 28 Août 2007 par aodot
TheRec Posté 28 Août 2007 Posté 28 Août 2007 Bonsoir, Difficile de te répondre vu qu'on ne sait pas ce qui ne va pas... "ça marche pas" n'est pas très descriptif et si ça marchait, à priori tu n'aurais pas pris la peine d'écrire un message. Donc, as tu un message d'erreur généré par PHP (vu la section du forum ou tu postes) ? As-tu une erreur MySQL (tu peux l'afficher en utilisant la fonction mysql_error juste après avoir fait tes requêtes, comme tu l'as fait) ? Si ton problème est d'ordre logique et que tu ne sais pas faire ce que tu souhaite dis-le plus clairement
heliotrope Posté 28 Août 2007 Posté 28 Août 2007 (modifié) Salut, est ce que la portion de code postée correspond à l'intégralité du script ? si oui, il y a des choses bizarres tu effectues une 1ere requete $select_town = mysql_query("SELECT offre.ville, ville.ville, ville.id FROM offre LEFT JOIN ville ON offre.ville = ville.id ORDER BY ville.ville")or die(mysql_error()); mais n'exploite pas son resultat ensuite tu executes une seconde requete en utilisant une variable $donnees_town[ville] qui n'est renseignée nulle part. C'est normal ? Modifié 28 Août 2007 par heliotrope
aodot Posté 28 Août 2007 Auteur Posté 28 Août 2007 Bonsoir, Difficile de te répondre vu qu'on ne sait pas ce qui ne va pas... "ça marche pas" n'est pas très descriptif et si ça marchait, à priori tu n'aurais pas pris la peine d'écrire un message. Donc, as tu un message d'erreur généré par PHP (vu la section du forum ou tu postes) ? As-tu une erreur MySQL (tu peux l'afficher en utilisant la fonction mysql_error juste après avoir fait tes requêtes, comme tu l'as fait) ? Si ton problème est d'ordre logique et que tu ne sais pas faire ce que tu souhaite dis-le plus clairement Bonsoir, Merci de votre réponse. Oui c'est vrai que c'est pas très clair. En fait, quand je dis que ça ne marche pas c'est que le tri n'est pas fait et il n'y a pas d'erreur. Mon but est de trier les offres par nom de ville. C'est nom de ville sont associées à un id dans la table ville. et c'est cet idée qui est utilisé dans la table offre pour indiquer la ville de l'offre en question. Une requete de tri par ville simple tri les offres par l'id de la ville alors que je dois trier par nom de ville. Je ne sais pas si je suis assez clair lol mais pour moi la logique est claire mais le mettre en pratique est plus compliqué.
aodot Posté 28 Août 2007 Auteur Posté 28 Août 2007 (modifié) Salut, est ce que la portion de code postée correspond à l'intégralité du script ? si oui, il y a des choses bizarres tu effectues une 1ere requete mais n'exploite pas son resultat ensuite tu executes une seconde requete en utilisant une variable $donnees_town[ville] qui n'est renseignée nulle part. C'est normal ? Bonsoir, Merci également à vous pour votre réponse. Oui c'est l'intégralité du code mis à part l'affichage des résultats de la boucle while que j'ai simplifié pour une meilleure compréhension. En fait, pour moi, la requète select town tri les villes par nom comme je le désire. et la seconde requète tri les offres par rapport aux villes triées. Avec cette première requète le classement des villes est ok mais je dois utiliser ce classement pour trier les offres par nom de ville. En gros si je rajoute une boucle while après la première requète, la variable $donnees_town[ville] permet de trier les villes par nom. Ca fait pas mal de jour que j'ai la tete dans ce code donc je n'ai peut etre pas assez de recul pour trouver la solution mais après maintes recherches sur les forums, toujours pas de solution. Grace a votre expérience aurez vous vu un truc qui pouvait expliquer ce problème ? Merci encore, en espérant que vous pourriez m'aider. Bonne soirée. Modifié 28 Août 2007 par aodot
pluriels Posté 29 Août 2007 Posté 29 Août 2007 (modifié) Pour reprendre dans l'ordre, heliotrope souligne le point suivant : 1/ $select_town = mysql_query("SELECT offre.ville, ville.ville, ville.id FROM offre LEFT JOIN ville ON offre.ville = ville.id ORDER BY ville.ville")or die(mysql_error()); Tu exécutes bien ta requête et le résultat est stocké dans $select_town. Le problème, c'est que tu ne t'en sers pas. 2/ Ensuite tu lances une deuxième requête, en espérant que la table a gardé le tri que tu viens de lancer. Or, ta deuxième requête se lance sur la table dans son état initial 3/ $select = "SELECT * FROM offre WHERE categorie='$categorie' AND type='$type' ORDER BY [b]'$donnees_town[ville]'[/b] ASC limit $limite,$nombre"; Dans cette partie du code, la clause order by attend un nom de champ du type offre.id_ville, si tu utilises $donnees_town[ville], cela risque de ne rien trier. 4/ Ta première requête touche au but, mais il faut t'en servir. J'ai rajouté la clause WHERE de ta seconde requête afin d'isoler les bons enregistrements. $select_town = mysql_query("SELECT * FROM offre LEFT JOIN ville ON offre.ville = ville.id WHERE categorie='$categorie' AND type='$type'ORDER BY ville.villeASC limit $limite,$nombre")or die(mysql_error()); Modifié 29 Août 2007 par pluriels
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant