Maison > base de données > tutoriel mysql > le corps du texte

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

Barbara Streisand
Libérer: 2024-11-10 15:13:02
original
364 Les gens l'ont consulté

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 |
-------------------------------------------------------------------
Copier après la connexion

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
Copier après la connexion

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 
Copier après la connexion

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 |
-------------------------------------------------------------------
Copier après la connexion

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