Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL:如果一年中的这个月是一月,如何查询上个月的数据?_Php_Mysql - Fatal编程技术网

Php MySQL:如果一年中的这个月是一月,如何查询上个月的数据?

Php MySQL:如果一年中的这个月是一月,如何查询上个月的数据?,php,mysql,Php,Mysql,如果今年的当前月份是2019年1月,我很难找到被视为2018年月份的上个月(12月)的记录 这是我到目前为止尝试过的,但它不显示记录 mysql_query("SELECT * FROM tbl_logs WHERE MONTH(date_added) = MONTH(NOW())-1 "); //This must display all records of December of last year. 但在某些查询中,它是有效的。就像去年的记录一样: mysql_query("S

如果今年的当前月份是2019年1月,我很难找到被视为2018年月份的上个月(12月)的记录

这是我到目前为止尝试过的,但它不显示记录

 mysql_query("SELECT * FROM tbl_logs WHERE MONTH(date_added) = MONTH(NOW())-1 ");
 //This must display all records of December of last year. 
但在某些查询中,它是有效的。就像去年的记录一样:

 mysql_query("SELECT * FROM tbl_logs WHERE YEAR(date_added) = YEAR(NOW())-1 ");
 //This displays all records of last year
我的输出应该能够显示去年12月的所有记录


多谢各位

您可以先使用
date\u sub
减去一个月,然后使用
month()
year()
提取月份或年份

上个月:

SELECT *
       FROM tbl_logs
       WHERE month(date_added) = month(date_sub(now(), INTERVAL 1 MONTH));
SELECT *
       FROM tbl_logs
       WHERE date_added >= concat(year(date_sub(now(), INTERVAL 1 MONTH)),
                                  '-',
                                  lpad(month(date_sub(now(), INTERVAL 1 MONTH)), 2, '0'),
                                  '-',
                                  '01')
             AND date_added < concat(year(now()),
                                     '-',
                                     lpad(month(now()), 2, '0'),
                                     '-',
                                     '01');
去年:

SELECT *
       FROM tbl_logs
       WHERE year(date_added) = year(date_sub(now(), INTERVAL 1 MONTH));
SELECT *
       FROM tbl_logs
       WHERE date_added >= concat(year(now()) - 1,
                                  '-01-01')
             AND date_added < concat(year(now()),
                                     '-01-01');
但更有效的方法是计算和使用范围,因为它允许使用索引

上个月:

SELECT *
       FROM tbl_logs
       WHERE month(date_added) = month(date_sub(now(), INTERVAL 1 MONTH));
SELECT *
       FROM tbl_logs
       WHERE date_added >= concat(year(date_sub(now(), INTERVAL 1 MONTH)),
                                  '-',
                                  lpad(month(date_sub(now(), INTERVAL 1 MONTH)), 2, '0'),
                                  '-',
                                  '01')
             AND date_added < concat(year(now()),
                                     '-',
                                     lpad(month(now()), 2, '0'),
                                     '-',
                                     '01');
选择*
来自tbl_日志
其中,date\u added>=concat(年(date\u sub(now(),间隔1个月)),
'-',
lpad(月份(日期(现在(),间隔1个月)),2,'0'),
'-',
'01')
添加的日期
去年:

SELECT *
       FROM tbl_logs
       WHERE year(date_added) = year(date_sub(now(), INTERVAL 1 MONTH));
SELECT *
       FROM tbl_logs
       WHERE date_added >= concat(year(now()) - 1,
                                  '-01-01')
             AND date_added < concat(year(now()),
                                     '-01-01');
选择*
来自tbl_日志
其中date_added>=concat(year(now())-1,
'-01-01')
添加的日期

你想要的索引将出现在
tbl\u日志(添加日期)

这可能有点麻烦,看来Sticky bit有一个很好的答案,但你可以试试这个

$currentDate = date("m", time());
        if($currentDate != 01){
            $currentDate--;
        }else{
            $currentDate = 12;
        }
然后插入
$currentDate

$query = "SELECT * FROM tbl_logs WHERE MONTH(date_added) = MONTH( " . $currentDate . " )";
mysql_query($query );

月份(现在()-1)产生这个日期:2018年2月1日我的代码的正确格式应该是什么?能给我看看吗?谢谢分享你的答案!