Rechercher : dans
Par :

[PHP] requete pour garder les meilleurs prix

Dernière réponse le 14 aoû 2007 à 08:23:48 theflagada, le 10 aoû 2007 à 16:12:09 
 Signaler ce message aux modérateurs

Bonjour,
voici en gros la structure de ma table:

prix;ville;fournisseur

0,2;toulouse,sfr
0,3;toulouse,bouygues
0,4;toulouse,orange
0,2;bordeaux,sfr
0,4;bordeaux,bouygues
0,2;bordeaux,orange
0,6;Paris,sfr
0,2;Paris,orange
0,3;Paris,bouygues
0,4;geneve,sfr
0,2;geneve,orange
0,6;geneve,bouygues

J essaye de faire une requete pour pouvoir recuperer seulement les lignes suivantes:

0,2;toulouse,sfr
0,2;bordeaux,sfr
0,2;bordeaux,orange
0,2;Paris,orange
0,2;geneve,orange

Autrement dit, pour chaque ville, la ligne ou le prix est le plus interessant... J ai beau tourner ça dans tous les sens, je sèche.... Si quelqu'un a une idée, elle sera la bienvenue.

merci d'avance
Flagada

Configuration: Windows XP
Firefox 2.0.0.6

1

styvodiabolo, le 10 aoû 2007 à 16:27:50

Salut theflagada,

En suggestion:

--prémice de la connexion à ta base--

$sql="SELECT MIN(prix) AS prix_min FROM TA_TABLE";
$result=mysql_query($sql) or die("Requête Prix_Mini échouée");
$data=mysql_fetch_assoc($result);

$sql_prix="SELECT prix, ville, fournisseur FROM TA_TABLE WHERE prix = {$data['prix_min']}";
$result_prix=mysql_query($sql_prix); or die("Requête Prix_Avantageux échouée")
while($data_prix=mysql_fetch_assoc($result_prix)) {
echo $data_prix['prix'].';'.$data_prix['ville'].','.$data['fournisseur']."<br>";
}

Répondre à styvodiabolo

2

theflagada, le 10 aoû 2007 à 16:41:13

Salut styvodiabolo,

enfait j ai deja essayé cette requete mais il me sort seulement les lignes avec les prix les plus bas de la table et non les prix les plus bas pour chaque ville...

Répondre à theflagada

3

styvodiabolo, le 10 aoû 2007 à 16:54:41

Alors il faudrait faire un regroupement :

SELECT MIN(prix) AS Prix_mini_ville, ville, fournisseur FROM TA_TABLE GROUP BY ville, fournisseur

L'idée est là mais pas forcément la synthaxe.
Regarde un soupcon pour la notion de regroupement dans le SQL.
Je reviens ce soir, dis moi quoi.

Répondre à styvodiabolo

4

theflagada, le 10 aoû 2007 à 17:29:20

Bien vu!! j avais pas pensé à ça... Ca marche nickel.
Merci beaucoup et à bientôt.

Répondre à theflagada

5

styvodiabolo, le 10 aoû 2007 à 19:38:54

Pas de souci ;).
Bon courage.

Répondre à styvodiabolo

6

theflagada, le 13 aoû 2007 à 10:46:59

Hello,
Eh bien en fait, il s'avère que cette requête ne marche pas.... j ai réalisé que le problème était le suivant.
Si je groupe par ville, cela m affiche le bon nombre de resultats avec les destinations qui correspondent a chaque resultat... mais toujours le meme fournisseur; autrement dit, pour un prix donné, je n'ai pas le fournisseur correspondant !
Si je groupe par vile et fournisseur, il me donne toute les lignes de la table..
Je ne comprends vraiment pas comment parvenir a selectionner les bonnes lignes..

La requete qu'il me faudrait serait la suivante ( en langue francaise): Selectionner ville, fournisseur, prix dans matable où le prix est le moins cher pour chaque destination.

S'il vous plait, aidez moi, Cette petite requete bloque tout mon avancement ...
Merci d'avance
Flagada

Répondre à theflagada

7

JoloKossovar, le 13 aoû 2007 à 10:55:21

Salut ^^
hum je ne sais pas si tu peux avoir ton résultat directement. en revencha tu pourrai faire une ptite boucle de vérification du prix.

Répondre à JoloKossovar

8

theflagada, le 13 aoû 2007 à 11:09:38

Ok , Donc tu pense que ce n'est as faisable?
Decidément je suis assez déçu des capacités du php.... et de mysql...
Et sinon , tu as une idée pour la boucle ?

Répondre à theflagada

9

JoloKossovar, le 13 aoû 2007 à 15:16:12

Je dis peut etre une bétise, et d'ailleur as tu essayé de former une requete html avec la fonction min sur ton prix ?

Répondre à JoloKossovar

10

JoloKossovar, le 13 aoû 2007 à 15:22:48

Répondre à JoloKossovar

11

JoloKossovar, le 13 aoû 2007 à 15:24:33

Un truc du genre :

SELECT t1.ville,t1.fournisseur,t1.prix FROM MaTable t1 where t1.prix( Select min( t2.prix ) from Matable t2 where t2.destination=t1.destination )

Répondre à JoloKossovar

12

 theflagada, le 14 aoû 2007 à 08:23:48

Bonjour,
EN fait j ai fait une boucle pour verifier et je fais une deuxieme requete pour recuperer le nom du fournisseur. Ca marche tre bien ( bon j ai une requete de plus et sachant que j ai 40000 lignes ds ma table c un peu lourd mais bon...)

Répondre à theflagada