Aller au contenu

Tri par rapport à une autre table


aodot

Sujets conseillés

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é par aodot
Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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é par heliotrope
Lien vers le commentaire
Partager sur d’autres sites

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é.

Lien vers le commentaire
Partager sur d’autres sites

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é par aodot
Lien vers le commentaire
Partager sur d’autres sites

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.ville
ASC limit $limite,$nombre
")or die(mysql_error());

Modifié par pluriels
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...