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 ?
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!