Problème de tri MySQL ORDER BY CASE
Dans MySQL, la clause ORDER BY vous permet de trier les résultats de la requête en fonction des colonnes spécifiées. Cependant, vous pouvez rencontrer des difficultés lors du tri de plusieurs colonnes qui dépendent d'une condition spécifique.
Considérez le scénario suivant :
Vous disposez d'une table avec deux colonnes, timestamp_one et timestamp_two. Vous devez récupérer toutes les lignes où id_one ou id_two est égal à 27. De plus, vous souhaitez trier les résultats en fonction de timestamp_one ou timestamp_two selon que id_one ou id_two vaut 27.
Alors que la requête suivante est correcte récupère les lignes requises :
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
Il trie les lignes par chaque colonne individuellement, plutôt que de les combiner en un seul horodatage pour le tri.
Pour résoudre ce problème, vous pouvez utiliser ce qui suit requête 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 modifiée, nous simplifions la clause ORDER BY en utilisant une seule expression CASE pour déterminer l'ordre de tri. Cela nous permet de trier les lignes en fonction d'un horodatage combiné qui sélectionne dynamiquement la colonne appropriée (timestamp_one ou timestamp_two) en fonction de la valeur de id_one et id_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!