5 votes

ORDER BY différent pour chaque SELECT dans un UNION avec MySQL

En utilisant PHP et MySQL, existe-t-il un moyen d'utiliser un ORDER BY différent pour chacune des déclarations SELECT dans un UNION ?

SELECT * FROM the_table WHERE color = 'blue' ORDER BY price ASC LIMIT 5
UNION ALL
SELECT * FROM the_table WHERE color = 'red' ORDER BY RAND() LIMIT 10

La déclaration ci-dessus ne fonctionne pas. Il semble que vous ne puissiez effectuer un ORDER BY que sur le jeu de résultats final. Existe-t-il un moyen d'effectuer un ORDER BY sur le premier SELECT puis un ORDER BY différent sur le second SELECT en utilisant UNION ?

11voto

Tobias P. Points 3605
(SELECT * FROM the_table WHERE color = 'blue' ORDER BY price ASC LIMIT 5)
UNION ALL
(SELECT * FROM the_table WHERE color = 'red' ORDER BY RAND() LIMIT 10)

8voto

NZN Points 31

Veuillez noter que cela ne fonctionne pas si vous ne spécifiez pas de LIMITE (bien que vous puissiez spécifier une limite fictive très importante). Voir la documentation mysql (13.2.7.3. Syntaxe UNION) :

"L'utilisation de ORDER BY pour les instructions SELECT individuelles n'implique rien quant à l'ordre dans lequel les lignes apparaissent dans le résultat final, car UNION produit par défaut un ensemble de lignes non ordonnées... "Pour que les lignes d'un résultat UNION soient constituées des ensembles de lignes récupérés par chaque SELECT l'un après l'autre, sélectionnez une colonne supplémentaire dans chaque SELECT pour l'utiliser comme colonne de tri et ajoutez un ORDER BY après le dernier SELECT :

"(SELECT 1 AS sort_col, col1a, col1b, ... FROM t1) UNION (SELECT 2, col2a, col2b, ... FROM t2) ORDER BY sort_col ; Pour maintenir l'ordre de tri dans les résultats SELECT individuels, ajoutez une colonne secondaire à la clause ORDER BY :

"(SELECT 1 AS sort_col, col1a, col1b, ... FROM t1) UNION (SELECT 2, col2a, col2b, ... FROM t2) ORDER BY sort_col, col1a ; "

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X