Maison > base de données > tutoriel mysql > Comment puis-je trier les résultats dans des sections distinctes d'une requête MySQL UNION ?

Comment puis-je trier les résultats dans des sections distinctes d'une requête MySQL UNION ?

Barbara Streisand
Libérer: 2025-01-11 11:29:42
original
262 Les gens l'ont consulté

How Can I Sort Results Within Separate Sections of a MySQL UNION Query?

Trier les résultats par section dans la requête MySQL UNION

Introduction :

Lorsque vous utilisez plusieurs instructions SELECT combinées avec UNION pour interroger des données, vous devez trier les résultats de manière appropriée par titre tout en conservant l'indépendance de chaque requête.

Question :

Un scénario est que trois requêtes SELECT récupèrent des données en fonction de différents critères de distance pour la recherche sur un site Web. La première requête récupère les données pour les recherches de localisation exacte, la deuxième requête récupère les données dans un rayon de 5 kilomètres et la troisième requête récupère les données dans un rayon de 5 à 15 kilomètres. Les résultats de la requête sont combinés à l'aide de UNION et affichés sur une page avec un titre. Cependant, l'utilisateur souhaite trier les résultats sous chaque en-tête en fonction de l'identifiant ou de la date add_date.

Solution :

Pour y parvenir, MySQL introduit une pseudo colonne nommée "rank" pour chaque instruction SELECT. Cette pseudo colonne peut être utilisée pour trier dans un premier temps les résultats avant d'appliquer d'autres critères de tri. La requête modifiée suivante illustre cette approche :

<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 < 5
    UNION ALL
    SELECT 3 AS Rank, id, add_date FROM Table WHERE distance BETWEEN 5 AND 15
) AS RankedResults
ORDER BY Rank ASC, id DESC, add_date DESC;</code>
Copier après la connexion

Explication :

  1. Pseudo-colonne "Rank": Dans chaque instruction SELECT, une pseudo-colonne nommée "Rank" est introduite et se voit attribuer des valeurs uniques (1, 2 et 3). Cette colonne représente l'ordre ou le regroupement des résultats.

  2. Tri initial par "Classement" : Les résultats UNION sont initialement triés par la colonne "Classement" par ordre croissant. Cela garantit que les résultats sont regroupés selon leurs titres respectifs (« Résultats exacts », « Résultats dans un rayon de 5 km » et « Résultats dans un rayon de 5 à 15 km »).

  3. Tri supplémentaire par « id » et « add_date » : Au sein de chaque groupe (déterminé par « Rank »), les résultats sont ensuite triés par « id » et « add_date » par ordre décroissant.

Remarque :

Cette méthode utilise l'opération UNION ALL, qui contient des lignes en double dans le résultat combiné. Si vous n'avez pas besoin de lignes en double, vous pouvez utiliser l'opération UNION, qui éliminera les doublons.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal