Maison  >  Article  >  base de données  >  Comment trier selon l'horodatage précédent à partir de deux colonnes à l'aide de l'instruction MySQL CASE ?

Comment trier selon l'horodatage précédent à partir de deux colonnes à l'aide de l'instruction MySQL CASE ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-10 15:13:02365parcourir

How to Order by the Earlier Timestamp from Two Columns Using MySQL CASE Statement?

Problème MYSQL ORDER BY CASE

Dans MySQL, l'utilisation de l'instruction CASE dans la clause ORDER BY vous permet de spécifier plusieurs critères de tri en fonction de conditions particulières. Cependant, des défis surviennent lorsque l'on tente de trier deux colonnes d'horodatage différentes comme s'il s'agissait d'un horodatage unique et unifié.

Considérez la structure de table fournie :

-------------------------------------------------------------------
| id_one | id_two | timestamp_one | timestamp_two |
-------------------------------------------------------------------
| 27 | 35 | 09:30 | NULL |
| 35 | 27 | NULL | 09:35 |
| 27 | 35 | 09:34 | NULL |
| 35 | 27 | NULL | 09:33 |
-------------------------------------------------------------------

L'objectif est d'ordonner les lignes. par l'horodatage précédent, qu'il soit stocké dans la colonne timestamp_one ou timestamp_two. La requête suivante tente d'y parvenir à l'aide de l'instruction CASE :

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

Bien que cette requête ordonne correctement les lignes pour id_one=27, elle ne parvient pas à combiner les horodatages en un seul critère de tri.

Pour résoudre ce problème, la requête peut être modifiée comme suit :

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 

En utilisant une seule expression CASE au lieu d'instructions CASE distinctes pour chaque condition, MySQL fusionne les horodatages en un seul critère de tri. Cela garantit que les lignes sont ordonnées correctement, comme souhaité :

-------------------------------------------------------------------
| id_one | id_two | timestamp_one | timestamp_two |
-------------------------------------------------------------------
| 27 | 35 | 09:30 | NULL |
| 35 | 27 | NULL | 09:33 |
| 27 | 35 | 09:34 | NULL |
| 35 | 27 | NULL | 09:35 |
-------------------------------------------------------------------

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