9

重複の可能性:
データベースから取得するが、最後の 30 日間のみ

こんにちは、過去 30 日間のデータベース内の行をカウントするために使用する php コードがあります。-30問題は、数値が からに変わるようにコードを変更する-20と、出力数値が下がるのではなくから272になることです。360

コードは次のとおりです。

$result = mysql_query("SELECT * FROM all_count WHERE DATEDIFF(date,NOW()) = -30 and member ='000002'");
$num_rows60 = mysql_num_rows($result);
4

4 に答える 4

16

これを試して

select * from `table` where `yourfield` >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH)

日、年については、以下の例を参照してください。

DATE_SUB(CURDATE(), INTERVAL 15 DAY) /*For getting record specific days*/

DATE_SUB(CURDATE(), INTERVAL 1 YEAR) /*for getting records specific years*/


アナンドの場合、クエリ

BETWEEN DATE_SUB( CURDATE( ) ,INTERVAL 6 MONTH ) AND DATE_SUB( CURDATE() ,INTERVAL 3 MONTH ) 
/* For Getting records between last 6 month to last 3 month
于 2012-12-21T21:21:47.933 に答える
3

比較したほうがいい

`date`< DATE(NOW() - INTERVAL 30 DAY)

それよりも

 DATEDIFF(date,NOW()) = -30

最初のケースでは、日付の計算はクエリの開始時に 1 回だけ行われ、データベースは日付列の任意のインデックスを使用できます。

2 番目のクエリはすべての行で を計算する必要DATEDIFFがあり、データベースはインデックスを使用できません。2 番目のクエリは、完全なテーブル スキャンを強制します。

また、自分の column を呼び出さないことを強くお勧めしますdate。はい、名前をバッククォートで引用できることは知っていますが、それは面倒です。忘れると、構文エラーを忘れることができなくなります。列にわかりやすい名前を付けてください。どんなデートですか?日付は何を表している?

于 2012-12-21T21:31:36.163 に答える
2

代わりにこれを使用できます:

$result = mysql_query("SELECT * FROM all_count WHERE `date`< DATE(NOW() - INTERVAL 30 DAY) and     member ='000002'");
于 2012-12-21T21:11:01.970 に答える
0

こちらのドキュメントでわかるようにDATEDIFF、MySQLの関数は、最初の日付と 2 番目の日付の日数の違いを示します。

クエリは、差が正確に 30 日のすべての行のみを選択し、最大 30 日前の行は選択しません。したがって、20 日前の日付の行数が 30 日前より多い可能性は十分にあります。あなたが最も望んでいたのは:

SELECT * FROM all_count WHERE DATEDIFF(date,NOW()) >= -30 and member ='000002'
于 2012-12-21T21:11:57.273 に答える