[MYSQL] ORDER BY la plus petite de deux valeurs

ORDER BY la plus petite de deux valeurs [MYSQL] - SQL/NoSQL - Programmation

Marsh Posté le 26-06-2007 à 20:03:54    

Hello à tous !
 
J'aimerias savoir comment faire pour trier des requêtes MySQL par... la plus petites de deux valeurs.
 
Un truc qui doit ressembler à ça :
 
SELECT * from la_base ORDER BY min(rabais_site1, rabais_site2)
 
 
une idée ?

Reply

Marsh Posté le 26-06-2007 à 20:03:54   

Reply

Marsh Posté le 26-06-2007 à 20:28:43    

ben à priori ça, ça devrait fonctionner :
 
select min(v1, v2) as valeur from la_base order by valeur


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 26-06-2007 à 21:20:07    

et pour quelque chose que je pourrais utiliser avec mysql_fetch_array ça donnerait quoi ? paske là ça selectionne pas toutes les entrées, non ?


Message édité par finntroll le 26-06-2007 à 21:21:49
Reply

Marsh Posté le 28-06-2007 à 13:12:10    

qqun sait ?

Reply

Marsh Posté le 28-06-2007 à 13:20:43    

min est une fonction d'aggregation et non de comparaison des valeurs au sein d'un même recordset. ça ne peut donc pas fonctionner comme vous l'esperer.
tu peux par contre faire quelque chose dans le genre:

Code :
  1. select
  2. case when v1 > v2 then v1 else v2 end as toto
  3. ...
  4. from
  5. tatable
  6. order by
  7. toto

Reply

Marsh Posté le 28-06-2007 à 14:21:44    

hier quand j'ai vu ce topic j'ai fait une crise cardiaque, au point d'en oublier de répondre :D
 
(spa trop la question qui ma tué, c'est surtout la réponse qui m'a achevé :D)
 
merci anapajari :jap:

Reply

Marsh Posté le 28-06-2007 à 15:10:17    

anapajari a écrit :

min est une fonction d'aggregation et non de comparaison des valeurs au sein d'un même recordset. ça ne peut donc pas fonctionner comme vous l'esperer.


 
rha quel boulet, je voulais dire "il faut faire l'opération dans le select avec un alias et faire le order by sur l'alias", et j'ai même pas fait gaffe que min ça fonctionnerait pas dans ce cas. :pt1cable:


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 28-06-2007 à 17:56:40    

merci énormement  :jap:


Message édité par finntroll le 28-06-2007 à 17:56:52
Reply

Marsh Posté le 29-06-2007 à 13:35:04    

ça marche pas..
 
SELECT case when reduction_base > reduction_full then reduction_base else reduction_full end as reduction FROM premcar_vehiculesdispo ORDER by reduction;
 
 
me renvoie pas l'entier des entrées quand je fais mysql_fetch_array ! ça me renvoie uniquement une valeur appellée reduction, mais sans ce que y'a autour... comment s'y prendre ?


Message édité par finntroll le 29-06-2007 à 13:40:31
Reply

Marsh Posté le 29-06-2007 à 13:41:17    

comprendre le sql et mettre les champs dont on a besoin dans le select?

Reply

Marsh Posté le 29-06-2007 à 13:41:17   

Reply

Marsh Posté le 29-06-2007 à 13:46:16    

J'ai l'impression que tu ne te rends pas exactement compte de ce que le mysql_fetch_array() fait .... : il met dans un tableau associatif et indexé numérique, UN row de fields de ton recordset..

 

Le Select que tu as fait ici te renvoie donc uniquement "reduction" puisque c'est la seule valeur que tu select.

 

Je ne sais pas si tu as le droit de combiner des champs traditionnels une fois que tu as fait un case dans le select, donc au risque de me trouver responsable de la mort de quelqu'un par crise cardiaque, essaye un truc comme ça :

 
Code :
  1. Select case when tralala > tralali then tralala else tralali as youtouchmytralala, champ2, champ3, champ4 from tatable order by youtouchmytralala
 

où champ2, 3 et 4 sont tous les autres champs que tu veux


Message édité par ZeBix le 29-06-2007 à 13:47:43
Reply

Marsh Posté le 13-07-2007 à 17:54:57    

c'est possible de mettre  
 
Select case when tralala > tralali then tralala else tralali as youtouchmytralala, * from tatable order by youtouchmytralala
 
ou pas ?

Reply

Marsh Posté le 13-07-2007 à 21:20:46    

Oui.
(par contre, évite qu'il y ait un champ nommé youtouchmytralala dans la table, sinon ca risque de compliquer les choses)
 
Sinon, le "case" que tu utilises, ce serait pas la définition d'un max() au lieu d'un min() ?!? :whistle:


Message édité par mrbebert le 13-07-2007 à 21:21:23
Reply

Marsh Posté le 13-07-2007 à 23:33:09    

en sql server on peut très bien utiliser case dans la clause order by d'une requete, à voir si ca fonctionne aussi en MySQL [:dawa]
 
select * from <table> order by case when rabais_site1 > rabais_site2 then rabais_site2 else rabais_site1 end
 
à condition que les deux champs soient du même type ou qu'une conversion puisse se faire

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed