Requete mysql

bonjour,

je merdouille sur une requete mysql…

j’ai une table d’un produit X, distribué ds Y endroit, dont je souhaiterai suivre l’evolution du prix… en mettant en priorité la date du dernier enregistrment… de manière a voir les prix les plus recent. et après, trier par prix…

histoire de ne pas avoir une prix datant de plusieurs mois, donc certainement plus à jour…

voici la table :

±—±----------±-----------±------+
| id | idshop | date | prix |
±-±--------±-------------±------+
| 1 | 1 | 2005-09-03 | 10.00 |
| 2 | 2 | 2005-09-07 | 11.50 |
| 3 | 3 | 2005-09-06 | 10.30 |
| 4 | 4 | 2005-09-07 | 11.90 |
| 5 | 1 | 2005-09-08 | 10.00 |
| 6 | 2 | 2005-09-08 | 11.20 |
| 7 | 3 | 2005-09-08 | 10.00 |
| 8 | 1 | 2005-09-01 | 10.00 |
±-±--------±-------------±------+

SELECT produit.idsshop,produit.prix,produit.date,shop.id,shop.marque,shop.adresse FROM produit,shop WHERE shop.id=produit.idshop ORDER BY date,prix ASC LIMIT 0,1

quand je mets ORDER BY date, prix il ne tri pas par date…
avec ORDER BY date c’est bon… mais comment faire les 2 en meme temps?

bref je souhaite après le prix recent de chaque shop, et ensuite trier par prix…

masi je m’embrouille un peu les pinceaux !

merci de votre aide!

Le plus récent? ORDER BY date DESC mais si tu ajoute un tri sur le prix, tu ne feras que mettre devant les prix les plus bas pour les dates identiques.

c’est ca qu je comprend pas, en mettant date,prix DESC, ca me tri par date, mais en ASC!

date, prix DESC ou date,prix ASC … il m’indique le prix le moins cher, mais à une date dépassé…

comment tout d’abord, limité le resultat à 1 reponse par shop, et ensuite trié par prix???

C’est normal hein. date, prix DESC = trier par date ascendante (a-z), puis si des dates sont identiques, trier les tuples par prix descendants.

heu… oui, soit!

mais le pb c’est avec date, prix ASC, ca me donne la meme chose :s

et pour eviter les doublons, eviter d’avoir des anciennes dates sur un meme shop ?

c’est bien DISTINCT?

SELECT DISTINCT produit.idsshop,produit.prix,produit.date,shop.id,shop.marque,shop.adresse
FROM produit,shop
WHERE shop.id=produit.idshop
ORDER BY date,prix ASC
LIMIT 0,1

mais comment dire que l’on veut un DISTINCT sur l’idshop?

il faut que tu tri la date dans l’ordre décroissant => date DESC, puis le prix dans l’ordre que tu veux.
Donc date DESC, prix DESC ou date DESC, prix ASC

ha bah voilà ! :slight_smile:

naïvement, je savais pas qu’on pouvait faire “date ASC, prix DESC” …

merci :slight_smile:

suite à la question sur les doublons.

SELECT produit.idsshop,produit.prix,produit.date,shop.id,shop.marque,shop.adresse
FROM produit,shop
WHERE shop.id=produit.idshop
GROUP BY idshop
ORDER BY date,prix ASC
LIMIT 0,1

limite bien à une ligne par idstation… mai pas la bonne. les dates ne sont pas les dernieres…

alors que :

SELECT produit.idsshop,produit.prix,produit.date,shop.id,shop.marque,shop.adresse
FROM produit,shop
WHERE shop.id=produit.idshop
ORDER BY date,prix ASC
LIMIT 0,1

liste correctement: tri par date (plus recente > plus anciennes) suivi du prix (du - au +).

comment se fait il qu’il zappe le premieres lignes?

non au fait, il ne zappe pas les premires lignes… au contraire, il prend les données dans l’ordre…avant le tri! (logique)

comment faire pour qu’il fasse le GROUP BY après le ORDER BY ???

Le distinct a un seul but : supprimer les tuples en double, rien d’autre.
A priori le GROUP BY est fait avant l’ORDER BY, ce qui semble logique hein :slight_smile:

SN > tuples ? tu parles des lignes? de N-uplets ?

Ca me disait quelque chose ton soucis : je te suggère le topic d’un forum d’HFR, problème(résolu) identique au tiens :

http://forum.hardware.fr/hardwarefr/Progra…jet-73379-1.htm

t-uple = n-uplets.