L'opérateur UNION
effectue un tri implicite dans le cadre de l'opération d'union (IIRC, sur la (les) colonne (s) de clé).
Si vous voulez un autre tri dans le résultat, vous devez appliquer un ORDER BY
à la sélection avec union.
Dans votre cas, vous avez besoin d'un moyen de faire la distinction entre la première sélection et la seconde, afin que vous puissiez commander l'union correctement. Quelque chose comme (non testé):
(SELECT table1.*, 0 AS TMP_ORDER FROM table1 ORDER BY fieldA ASC LIMIT 3)
UNION
(SELECT table1.*, 1 AS TMP_ORDER FROM table1)
ORDER BY TMP_ORDER ASC,
CASE WHEN TMP_ORDER = 0 THEN fieldA ELSE 0 END ASC,
CASE WHEN TMP_ORDER = 1 THEN fieldB ELSE 0 END DESC
Le problème avec cette approche est que vous aurez des doublons pour les trois lignes sélectionnées dans le cadre de la première requête dans la UNION
(car les colonnes ne correspondent pas tout à fait).
Êtes-vous sûr de ne pas pouvoir utiliser deux déclarations SELECT
à la place?
Voir [UNION Syntaxe] (http://dev.mysql.com/doc/refman/5.0/en/union.html) . Rechercher 'l'utilisation de ORDER BY pour des instructions SELECT individuelles ne signifie rien sur la commande'. Voir également [ce post SO] (http://stackoverflow.com/questions/3163503/sorting-union-queries-in-mysql/3163526#3163526). – Mike
wow, ça a marché ... mais comment ça marche? mmm .. je suis un peu confus ..! – stighy