Que fait ce trait d'union entre les colonnes updated_at et created_at dans l'ordre par clause?

select * from `users` order by updated_at - created_at DESC 
-1
user13376003 1 sept. 2020 à 18:13

2 réponses

Meilleure réponse

C'est un signe moins, donc il soustrait la date de création de la date de mise à jour sur chaque ligne et utilise le résultat pour classer les lignes renvoyées.

Les deux sont des horodatages, la date de création venant en premier et étant donc un nombre inférieur. Plus la différence entre la date de création et la date de mise à jour est grande, plus les résultats seront élevés en ordre décroissant, les résultats ayant la même date de mise à jour et de création venant en dernier.

0
doublesharp 1 sept. 2020 à 16:32

Il semble que l'intention de la clause order by est de trier par la différence entre les deux dates. Les lignes où la différence est la plus grande sont triées en premier.

Cependant, si les colonnes sont en fait d'un type de données de type date, il est peu probable que cela fonctionne correctement dans MySQL, qui traite les soustractions de date de manière contre-intuitive et peu fiable (sous le hood, les dates sont implicitement converties en valeurs entières).

Vous devriez plutôt utiliser des fonctions de date, par exemple:

order by unix_timestamp(updated_at) - unix_timestamp(created_at) desc 

Ou:

order by timestampdiff(second, created_at, updated_at) desc
0
GMB 1 sept. 2020 à 15:27