Comment faire un ORDER BY sur une requête combinée ?
Dans ce petit tuto vous allez découvrir où il faut placer le order by dans une requête MySQL pour qu’il soit effectif lors d’un UNION.
Définition d’une requête combinée
Une requête combinée (UNION, INTERSECT, MINUS, etc..) est une requête qui fait appel à deux requêtes, dont les résultats vont être combinés en un seul .
Un problème se pose lorsque l’on désire faire sur cette requête un tri pour l’affichage. En effet le tri sur le résultat d’une requête combinée ne dépend pas des tris sur les requêtes filles (en clair on ne peut pas faire un ORDER BY par sous-requêtes pour que le résultat combiné soit trié).
Comment faire un ORDER BY?
Il vous faut faire le ORDER BY sur le résultat de ces deux requêtes. Pour cela il vous suffit de découper la requête en deux en parenthésant chacune des sous-requêtes (ex : ((Select toto from matable) UNION (select titi from matable)).
Vous vous demandez alors “Où est le tri dans tous cela ?”, et bien il n’y est pas encore pour la simple et bonne raison qu’il y a une astuce pour que le tri fonctionne correctement.
((Select toto from matable) UNION (select titi from matable)) ORDER BY machin; ne fonctionnera pas tous simplement parce que bien que “machin”, existe dans les deux tables, cet attribut n’existe pas dans les résultats des requêtes combinées.
Pour que cela fonctionne il faut ajouter “machin” dans le résultat chaque SELECT, ce qui nous donne :
(Select toto, machin from matable) UNION (select titi, machin from matable) ORDER BY machin;
Une astuce bien utile pour les tri sur des résultats de requêtes SQL.
A bientôt, Mickaël

Blog Référencement (SEO), Graphisme, Web, Communication et compagnie…

