Maison >base de données >tutoriel mysql >Comment trier les lignes en fonction de plusieurs colonnes d'horodatage dans MySQL avec l'instruction CASE ?
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 :
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!