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