19

1 日あたりの登録ユーザー数の合計を取得しようとしています。現時点ではこれを使用しています:

$sql = "SELECT name, email FROM users WHERE DATE_SUB(NOW(), INTERVAL 1 DAY) < lastModified"

しかし、これが 1 日または 24 時間ごとに機能するかどうかはわかりません。

たとえば、22 時間前に登録したユーザーは返されません。今日(=火曜日)のユーザーが欲しいだけです。

4

2 に答える 2

30

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() )
于 2013-03-26T10:06:01.127 に答える