Maison >base de données >tutoriel mysql >Comment puis-je trier les résultats MySQL UNION par groupes à l'aide de ORDER BY ?
L'opérateur UNION
de MySQL combine les résultats de plusieurs instructions SELECT
. Cependant, classer ces résultats combinés peut s’avérer délicat, en particulier lorsque vous devez effectuer un tri au sein de chaque groupe individuel. Ce guide démontre une méthode intelligente utilisant une pseudo-colonne pour y parvenir.
La solution implique ces étapes :
Introduisez une pseudo-colonne : Ajoutez une colonne (nous l'appellerons « Classement ») à chacune de vos SELECT
déclarations individuelles. Cette colonne agit comme un identifiant de groupe, attribuant une valeur unique à chaque groupe.
Construisez le UNION
: Combinez vos instructions SELECT
modifiées en utilisant UNION ALL
(ou UNION
si vous devez supprimer les doublons).
Commandez avec la requête externe : Enveloppez votre UNION
dans une instruction SELECT
externe. Utilisez la colonne « Classement » comme critère de tri principal dans la clause ORDER BY
de cette requête externe.
Affiner le tri : Après le tri par « Rang » (regroupement), ajoutez vos critères de tri secondaires (par exemple, « id » ou « add_date ») pour trier davantage les résultats au sein de chaque groupe.
Exemple illustratif :
Disons que vous avez une table nommée « table » avec les colonnes « id » et « add_date ». La requête suivante illustre la technique :
<code class="language-sql">SELECT * FROM ( SELECT 1 AS Rank, id, add_date FROM table UNION ALL SELECT 2 AS Rank, id, add_date FROM table WHERE distance < 10 -- Example condition for a group ) AS combined_results ORDER BY Rank, id, add_date;</code>
Cette requête ajoute une colonne « Classement » (1 pour le premier groupe, 2 pour le second), puis utilise le SELECT
externe pour trier d'abord par « Classement » (regroupant les résultats), puis par « id » et 'add_date' au sein de chaque groupe. Cela garantit un classement approprié au sein de chaque sous-ensemble de données généré par les instructions SELECT
individuelles. N'oubliez pas de remplacer table
et les conditions dans les sous-requêtes par votre table actuelle et votre logique de filtrage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!