[Résolu] Requête ORDER BY Multiple Columns

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [Résolu] Requête ORDER BY Multiple Columns

Re: Requête ORDER BY Multiple Columns

par hgus » 15 déc. 2011, 16:16

Merci de ta réponse,

Effectivement il m'a été donné cette dernière solution que tu cites :

Code : Tout sélectionner

SELECT mes_col, case when (offres IS NULL OR offres = '') then str_to_date('1900-01-01', %Y-%m-%d) else date_form end AS dt_offre, date_form FROM .. WHERE ... ORDER BY ..., dt_offre DESC, date_form
C'est résolu !

Re: Requête ORDER BY Multiple Columns

par Mazarini » 15 déc. 2011, 15:38

Bonjour,

Le plus simple est de faire 3 requêtes en sélectionnant les lignes concernées.

Pour gardes une seule requete, tu peux calculer une colonne (ou plusieurs) en fonction de tes différents critères et utiliser ces colonnes pour faire l'order by

[Résolu] Requête ORDER BY Multiple Columns

par hgus » 15 déc. 2011, 00:57

Bonsoir,

Je cherche à ordonner les résultats d'une requête SQL selon trois critères, intervenant sur plusieurs colonnes. Je suis arrivé ... presque au résultat escompté ... presque !

Résultat escompté :

- ordonner en priorité par la valeur max de plusieurs colonnes (ça ok)
- puis si le champ 'offres' non vide -> ordonner ces champs non vide par un autre champ 'date_form' (ça non ok)
- puis tout le reste par date_form (ça ok)

Voici un code qui marche, mais qui m'ordonne les champs 'offres' non vide par je ne sais quel critère :

SELECT taux95,taux96,taux97,taux99,taux100,offres,date_form
FROM `annonceur2`
ORDER BY GREATEST ( abs(taux95) , abs(taux96) , abs(taux97 ), abs(taux99 ), abs(taux100 ) ) DESC, offres DESC, date_form ASC

Résultat : en 1er donc les taux les + élevé, viens ensuite les champs 'offres' non-vide, puis le reste par date.
C'est presque bon, sauf que je ne sais comment insérer dans l'instruction ORDRE BY cette condition : IF ('offres' != "") (ORDER BY date-form ASC) ...

J'ai tenté ceci mais bien sur c'est incorrect :

SELECT taux95,taux96,taux97,taux99,taux100,offres,date_form
FROM `annonceur2`
ORDER BY GREATEST ( abs(taux95) , abs(taux96) , abs(taux97 ), abs(taux99 ), abs(taux100 ) ) DESC, if(offres<>"") date_form ASC, date_form ASC

Cela dépasse mes connaisances et j'avoue avoir pas mal chercher ici et là, ce n'est pas facile de trouver ce cas particulier ...

Il faudrait l'inverse de l'instruction IF (ISNULL( ... ) ... reconnu par MySQL mais je ne trouve pas.

A titre d'exemple mais ça ne correspond pas à ce que je cherche, voici une requête qui à l'air de fonctionner et de s'y approcher :

ORDER BY IF(ISNULL(order_column), "", order_column) ASC, name_column DESC

Merci de votre aide !

ugo