J'essaie d'obtenir le nombre total d'utilisateurs enregistrés par jour. En ce moment j'utilise ceci
$sql = "SELECT name, email FROM users WHERE DATE_SUB(NOW(), INTERVAL 1 DAY) < lastModified"
mais je ne sais pas si cela fonctionne par jour ou par 24 heures?
Par exemple, un utilisateur qui s'est inscrit il y a 22 heures ne devrait pas être retourné, tout comme l'utilisateur d'aujourd'hui (= mardi)
lastModified est, vraisemblablement, un datetime. Pour convertir cela en une date, vous pouvez simplement l'envelopper dans DATE (), c'est-à-dire DATE(lastModified)
. DATE()
renvoie la partie date d'une valeur datetime qui est effectivement 00:00 ce jour-là.
SELECT
name,
email
FROM users
WHERE DATE(lastModified) = DATE( DATE_SUB( NOW() , INTERVAL 1 DAY ) )
L'utiliser pour faire correspondre un WHERE
serait cependant inefficace car toutes les lignes nécessiteraient l'application de DATE et donc il analyserait probablement la table entière. Il est plus efficace de comparer lastModified
aux bornes supérieure et inférieure que vous recherchez, dans ce cas> = 00:00 sur SUBDATE(NOW(),INTERVAL 1 DAY)
et <00:00 sur NOW()
Par conséquent, vous pouvez utiliser BETWEEN pour faire votre choix en donnant ce qui suit.
SELECT
name,
email
FROM users
WHERE lastModified
BETWEEN DATE( DATE_SUB( NOW() , INTERVAL 1 DAY ) )
AND DATE ( NOW() )
Je pense que tu as besoin
SELECT
name,
email
FROM users
WHERE DATE(lastModified) = DATE( NOW() )
Cela "arrondit uniquement à la date" et ne correspondra donc qu'aux enregistrements "depuis minuit".