1 日あたりの登録ユーザー数の合計を取得しようとしています。現時点ではこれを使用しています:
$sql = "SELECT name, email FROM users WHERE DATE_SUB(NOW(), INTERVAL 1 DAY) < lastModified"
しかし、これが 1 日または 24 時間ごとに機能するかどうかはわかりません。
たとえば、22 時間前に登録したユーザーは返されません。今日(=火曜日)のユーザーが欲しいだけです。
1 日あたりの登録ユーザー数の合計を取得しようとしています。現時点ではこれを使用しています:
$sql = "SELECT name, email FROM users WHERE DATE_SUB(NOW(), INTERVAL 1 DAY) < lastModified"
しかし、これが 1 日または 24 時間ごとに機能するかどうかはわかりません。
たとえば、22 時間前に登録したユーザーは返されません。今日(=火曜日)のユーザーが欲しいだけです。
lastModified は、おそらく日時です。これを日付に変換するには、単純に DATE() でラップしますDATE(lastModified)
。DATE()
実質的にその日の 00:00 である datetime 値の日付部分を返します。
SELECT
name,
email
FROM users
WHERE DATE(lastModified) = DATE( DATE_SUB( NOW() , INTERVAL 1 DAY ) )
ただし、これを使用して a を一致させるWHERE
と、すべての行に DATE を適用する必要があり、おそらくテーブル全体をスキャンするため、非効率的です。lastModified
探している上限と下限を比較する方が効率的です。この場合、>= 00:00 がオンでSUBDATE(NOW(),INTERVAL 1 DAY)
、< 00:00 がオンです。NOW()
したがって、BETWEEN を使用して、次のような選択を行うことができます。
SELECT
name,
email
FROM users
WHERE lastModified
BETWEEN DATE( DATE_SUB( NOW() , INTERVAL 1 DAY ) )
AND DATE ( NOW() )