2012-12-21 22 views
8
からmysqlの結果を取得する可能性のある重複

:私は最後の30日から、データベース内の行をカウントするために使用するいくつかのPHPコードを持って
Get from database but only last 30 days過去30日間

こんにちは。問題は、番号を-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); 
+0

完全に同じ質問http://stackoverflow.com/questions/13912035/display-record-older-than-3-months-in-sql/13912197#13912197 – softsdev

+0

*正確に* 30のレコードを選択していますまたは20日齢。 – JJJ

答えて

15

年には、例えば以下を参照してください、日のためにこの

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 
+0

うわーこれは完全に説明しました –

+0

ありがとう、あなたの説明は私が違いを理解するのを助け、どのようにそれを行うべきかを助けました。完璧なおかげで –

2

あなたが代わりにこれを使用することができます:

$result = mysql_query("SELECT * FROM all_count WHERE `date`< DATE(NOW() - INTERVAL 30 DAY) and  member ='000002'"); 
+0

それは完璧に感謝しました –

0

を使用すると、ドキュメントhereで見ることができるように、MySQLでDATEDIFF関数はの日にあなたの違いを伝えます最初の日付から2番目の日付。

クエリでは、30日前の差異ではなく、差異が正確に30日の行がすべて選択されます。したがって、20日前の日付の行数が30日前よりも高いことは完全に可能です。あなたが最も可能性が高いたかったことだった。

SELECT * FROM all_count WHERE DATEDIFF(date,NOW()) >= -30 and member ='000002' 
4

それは

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

ではなく、最初のケースで

DATEDIFF(date,NOW()) = -30 

比較すると良いでしょう、日付Cクエリの開始時に一度だけ計算が行われ、データベースは日付列の任意のインデックスを使用できます。

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

また、私は、あなたのカラムをdateと呼ぶことを強く勧めます。はい、私はあなたがbackticksで名前を引用することができることを知っていますが、それはちょうど乱雑ですし、あなたの構文エラーを忘れることは忘れてしまったとき。列のわかりやすい名前を思いついてください。どのような日付ですか?日付は何を表していますか?

関連する問題