0

新規登録者全員を取得し、月別、年別のどちらで新規登録したかをフィルターに応じて表示する機能があります。

この例では、私は年を使用しています、私はこのSQLを持っています

Select date_registered from users where date_registered > '2011-12-31 12:59:59' AND date_registered < '2013-01-01 12:00:00'

したがって、これにより、すべてがdate_registered2012年に登録されます。

問題は、たとえばフィルターを適用するために、より動的にする方法です。 where date_registered > $dynamic_date and date_registered < $dynamic_date

またはこれをより良く達成する方法をアドバイスします。

ありがとう 。。

4

4 に答える 4

2

私はこれがあなたが探しているものだと信じています:

$sql = "SELECT date_registered 
       FROM users
       WHERE YEAR(date_registered) = YEAR(NOW())";

詳細については、これをチェックしてください

適切な週も必要なので、関数も見てくださいYEARWEEK()。同じように機能し、週の数も返します。こちらをご覧ください

于 2012-06-01T06:48:46.060 に答える
1

このコードを試してください

$sql = "SELECT date_registered FROM users WHERE date_registered > '$dateStart' AND date_registered < '$dateEnd'";

動的な日付変数はどこ$dateStartにありますか$dateEnd

変数を囲む1組の引用符で十分です。ご覧のとおり、すべてのステートメント文字列は二重引用符で囲む必要があります。

于 2012-06-01T06:46:44.230 に答える
1

小さなデータセットの場合は、Tikkesの回答が示す純粋なSQLルートを使用します。ただし、インデックスの目的では、境界の計算がより適切な場合があります。

mktimedateはこれに使用できます:

$lowerBound = date('Y-m-d H:i:s', mktime(0, 0, -1, 1, 1, date('Y')); //1 second before 00:00:00 1 Dec <current year>
$upperBound = date('Y-m-d H:i:s', mktime(0, 0, -1, 1, 1, date('Y') + 1); //1 second before 00:00:00 1 Dec <current year + 1>

したがって、それらをクエリに入れるだけです。

$sql = " ... WHERE d > '$lowerBound' AND d < '$upperBound'";
于 2012-06-01T06:49:44.023 に答える
1

を使用する必要がありますBETWEEN、それはより読みやすいです。

MySQLには日付と時刻の関数の素晴らしいリストがあります

基本的に、あなたがしたいことはこれです:

SELECT *
FROM Store_Information
WHERE Date BETWEEN '$start' AND '$end'

どのデータから始めているのか、$startと$endの入力をどこで取得するのかわかりません。time()から生成されたunixタイムスタンプを使用していると仮定すると、次のようなことができます。

SELECT *
FROM Store_Information
WHERE Date BETWEEN FROM_UNIXTIME('$start') AND FROM_UNIXTIME('$end')

これだけでは不十分な場合は、データのフォーマット方法($ start、$ end)を明確にしてください。

于 2012-06-01T06:57:42.603 に答える