Maison >base de données >tutoriel mysql >Comment trier les lignes en fonction de plusieurs colonnes d'horodatage dans MySQL avec l'instruction CASE ?

Comment trier les lignes en fonction de plusieurs colonnes d'horodatage dans MySQL avec l'instruction CASE ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-15 09:59:02661parcourir

How to Order Rows Based on Multiple Timestamp Columns in MySQL with CASE Statement?

MYSQL ORDER BY CASE Problème

Cette question pose un défi dans l'ordre des lignes en fonction de colonnes spécifiques en fonction d'une condition WHERE. Considérez la base de données fournie avec quatre lignes et colonnes d'horodatage. L'objectif est d'ordonner les lignes de telle sorte que les deux colonnes d'horodatage soient traitées comme un seul critère de classement.

La requête fournie trie initialement les horodatages en fonction des champs id_one et id_two séparément :

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

Cette approche aboutit à une sortie où les lignes sont triées au sein de chaque groupe id_one ou id_two, mais pas sous la forme d'un ordre d'horodatage combiné.

Pour obtenir l'ordre souhaité, nous pouvons utiliser une requête légèrement 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 révisée, timestamp_one et timestamp_two sont pris en compte pour le tri, quelle que soit la colonne d'ID qui correspond à la condition WHERE. L'instruction CASE sélectionne l'horodatage approprié en fonction des valeurs id_one et id_two.

Cette modification aboutit à la sortie souhaitée, où les lignes sont classées comme une seule colonne d'horodatage, en tenant compte à la fois de timestamp_one et timestamp_two :


| id_one | id_deux | horodatage_one | timestamp_two |

| 27 | 35 | 9h30 | NULL |

| 35 | 27 | NULL | 9h33 |

| 27 | 35 | 9h34 | NULL |

| 35 | 27 | NULL | 9h35 |

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