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)

是否有任何最好的简短替代方案来简单地从数据库中选择一张JUST 上个月的表格?

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 回答