Maison >base de données >tutoriel mysql >Comment trier les lignes en fonction d'un horodatage conditionnel dans MySQL ?

Comment trier les lignes en fonction d'un horodatage conditionnel dans MySQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-13 04:46:01415parcourir

How to Sort Rows Based on a Conditional Timestamp in MySQL?

Problème de tri MySQL ORDER BY CASE

Dans MySQL, la clause ORDER BY vous permet de trier les résultats de la requête en fonction des colonnes spécifiées. Cependant, vous pouvez rencontrer des difficultés lors du tri de plusieurs colonnes qui dépendent d'une condition spécifique.

Considérez le scénario suivant :

Vous disposez d'une table avec deux colonnes, timestamp_one et timestamp_two. Vous devez récupérer toutes les lignes où id_one ou id_two est égal à 27. De plus, vous souhaitez trier les résultats en fonction de timestamp_one ou timestamp_two selon que id_one ou id_two vaut 27.

Alors que la requête suivante est correcte récupère les lignes requises :

SELECT * FROM tablename 
WHERE id_one=27 OR id_two=27 
ORDER BY 
  CASE WHEN id_one=27 THEN timestamp_one END DESC, 
  CASE WHEN id_two=27 THEN timestamp_two END DESC

Il trie les lignes par chaque colonne individuellement, plutôt que de les combiner en un seul horodatage pour le tri.

Pour résoudre ce problème, vous pouvez utiliser ce qui suit requête modifiée :

SELECT id_one, id_two, timestamp_one, timestamp_two      
FROM tablename 
WHERE id_one = 27 
    OR id_two = 27 
ORDER BY 
    CASE 
        WHEN id_one=27 THEN timestamp_one 
        WHEN id_two=27 THEN timestamp_two 
    END DESC 

Dans cette requête modifiée, nous simplifions la clause ORDER BY en utilisant une seule expression CASE pour déterminer l'ordre de tri. Cela nous permet de trier les lignes en fonction d'un horodatage combiné qui sélectionne dynamiquement la colonne appropriée (timestamp_one ou timestamp_two) en fonction de la valeur de id_one et id_two.

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!

Déclaration:
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