Maison > base de données > tutoriel mysql > Comment trier les résultats de la base de données par différentes colonnes en fonction d'une condition ?

Comment trier les résultats de la base de données par différentes colonnes en fonction d'une condition ?

Susan Sarandon
Libérer: 2024-11-18 21:11:02
original
833 Les gens l'ont consulté

How to Sort Database Results by Different Columns Based on a Condition?

Comprendre l'ordre conditionnel avec ORDER BY

Dans les requêtes de base de données, la clause ORDER BY vous permet de trier les résultats de votre requête dans un format spécifié commande. Cependant, dans certains cas, vous devrez peut-être utiliser un ordre conditionnel en fonction de la valeur d'une colonne particulière.

Problème : trier par différentes colonnes en fonction du type

Considérez le scénario où vous disposez d'un tableau avec une colonne appelée "Type" qui détermine si la ligne correspond à un membre ou à un groupe. Vous souhaitez trier les résultats de telle sorte que les lignes des membres soient triées par leur nom de famille (LNAME) par ordre croissant, tandis que les lignes du groupe soient triées par leur nom de groupe (GROUPNAME) par ordre croissant.

Tentative incorrecte : Utilisation d'opérateurs logiques

La tentative fournie utilise des opérateurs logiques (if, ou) pour créer l'instruction conditionnelle, ce qui entraîne une requête incorrecte :

SELECT * 
  FROM table 
 WHERE STATUS = 'Active' 
 ORDER BY ((LNAME if TYPE = 'Member') OR (GROUPNAME if TYPE = 'Group')) ASC
Copier après la connexion

Solution : Utilisation de la fonction IF ou de l'instruction CASE

Pour obtenir cet ordre conditionnel, vous pouvez utiliser soit la fonction IF, soit l'instruction CASE :

Fonction IF :

ORDER BY IF(TYPE='Member', LNAME, GROUPNAME) ASC
Copier après la connexion

Ceci utilise la fonction IF pour déterminer quelle colonne utiliser pour le tri en fonction de la valeur de la colonne TYPE.

Instruction CASE :

ORDER BY 
    CASE `type` 
        WHEN 'Member' THEN LNAME 
        WHEN 'Group' THEN GROUPNAME
        ELSE 1 END 
    ASC
Copier après la connexion

Ceci utilise l'instruction CASE pour évaluer la valeur de la colonne TYPE et renvoyer la colonne appropriée pour le tri. La clause ELSE avec la valeur 1 garantit que les lignes de types inconnus sont triées jusqu'à la fin.

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