Order by qui est ignoré suite à un group by

WRInaute discret
Bonjour

2 tables une contenant un enregistrements et l'autre contenant 20 enregistrements . Les deux tables sont liés par un champ nommé SID .

Je souhaite faire une requete qui regroupe ces deux tables mais qui la trie selon un champ différent du group by .

Voici la requete :

Code:
SELECT * FROM vol_result LEFT JOIN vol_search ON (vol_result.sid = vol_search.sid) GROUP BY vol_result.sid ORDER BY vol_result.rprix

Cette requete lie correctement les deux tables mais le trie ne se fait pas en fonction de rprix mais de sid .

J'ai essayé toutes sortes de requetes mais j'ai tjrs le meme soucis pourtant je vois pas trop ce qui cloche .

Si quelqu'un voit le probleme ...
 
WRInaute discret
sALUT ARNAUD


Ca ne marche pas pour autant , j'y avais pensé mais rien a faire ca récupérer toujours le premier SID et non pas le prix le plus bas .

Parcque c'est ce que je veux en fait , un listing des dix dernieres recherches de vols avec leur prix mini .
 
WRInaute discret
Bonjour,

Lorsque tu fais un group by, c'est automatiquement trié sur cette clef, donc ton order by ne sert à rien !

Patrick
 
WRInaute discret
Salut

J'ai remarqué effectivemment ca . C'est tout de meme fortement ennuyeux . J'ai tout essayé sous toues les formes mais rien a y faire .

Je pense que tous les exemples de requetes trouvés sur le web avec des group by puis des order by sont donc fausses !

C'est grave lol
 
WRInaute passionné
max6 a dit:
Salut

J'ai remarqué effectivemment ca . C'est tout de meme fortement ennuyeux . J'ai tout essayé sous toues les formes mais rien a y faire .

Je pense que tous les exemples de requetes trouvés sur le web avec des group by puis des order by sont donc fausses !

Amha t'as pas pigé a quoi sert un group by :) C'est quand même pour regrouper des lignes d'une table et faire une opération éventuelle sur le résultat.

Si tu fais :
SELECT champ1, champ2, sum(champ3)
FROM unetable
group by champ1, champ2

Tu peux trier sur champ1, sur champ2 et même sur le résultat de la somme. TOUS les champs devraient soit être dans le group by, soit alors subir une opération. Mysql ne devrait même pas te permettre de faire un group by sans spécifier les champs dans le select.

Pour en revenir a ce que tu veux faire (ie les 10 vols avec le prix mini) :
SELECT vol_result.sid, min(vol_result.rprix)
FROM vol_result LEFT JOIN vol_search ON (vol_result.sid = vol_search.sid)
GROUP BY vol_result.sid
ORDER BY min(vol_result.rprix)
LIMIT 0,10
 
Discussions similaires
Haut