1

過去1か月のデータベースを選択する必要がある場合、これは正しい方法ですか?

$month1=mysql_query("select * from users where date_sub(concat(curdate(), ' 00:00:00'), interval 1 month day(curdate()) day) < start and start < date_sub(concat(curdate(), ' 00:00:00'), interval day(curdate()) day)");

このフィールドは特に正しいですか:date_sub(concat(curdate(), ' 00:00:00'), interval 1 month day(curdate()) day)

DBから前月のテーブルを選択するだけの最良の短い代替手段はありますか?

4

3 に答える 3

2
SELECT * FROM users 
   WHERE YEAR(`start`) = YEAR(DATE_SUB(NOW(), INTERVAL 1 MONTH)) 
      AND MONTH(`start`) = MONTH(DATE_SUB(NOW(), INTERVAL 1 MONTH))

編集:年条件の修正。

于 2012-07-15T00:07:47.540 に答える
0
  • 「00:00:00」を連結する必要はありません
  • 1 か月だけではなく、1 か月プラス日数を差し引いています。間隔に渡すことができるパラメーターは 1 つだけです。

と一緒に行きます

DATE_SUB(CURDATE(), INTERVAL 1 MONTH)

このday()関数は実際には月の日を提供するので、月初からすべてのレコードを取得したい場合はこれを使用します。

DATE_SUB(CURDATE(), INTERVAL DAY(CURDATE()) day);

今日は 7 月 15 日なので、これは 1 日から 15 日までのすべてのレコードを取得します。

于 2012-07-14T23:55:16.747 に答える
0

これはそれを行う必要があります:

SELECT * FROM users WHERE start > DATE_SUB(NOW(), INTERVAL 1 MONTH)

2 つの正確な日付の間に必要な場合:

SELECT * FROM users WHERE start BETWEEN  '2012-06-01' AND '2012-06-31'

非静的リクエストの場合:

SELECT * FROM users 
WHERE start > DATE_ADD(LAST_DAY(
                            DATE_SUB(NOW(), INTERVAL 2 MONTH
                        )),INTERVAL 1 DAY) 
AND start <= DATE_ADD(LAST_DAY(
                          DATE_SUB(NOW(), INTERVAL 1 MONTH
                      )),INTERVAL 1 DAY) 

に索引があることを確認してくださいstart

于 2012-07-15T00:02:04.017 に答える