如何仅从上个月的数据库表中提取数据

时间:2019-02-05 09:52:41

标签: php mysql

我只想显示上个月的记录,不包括本月的日期。例如,今天是2月5日,我想显示1月1日至31日的记录。

我有一个表tbl_order_details,在这里我需要分别按当前月份和上个月获取所有订单记录。日期类型的列名称为orderDate,这是我要获取当前月份到日期的行的操作:

SELECT COUNT(1) 
FROM tbl_order_details 
where merchantCode= '$user_code'
AND MONTH(orderDate) = MONTH(CURRENT_DATE()) 
AND YEAR(orderDate) = YEAR(CURRENT_DATE()) 

但是我不知道如何显示一月的记录,其中不包含2月的任何记录

3 个答案:

答案 0 :(得分:3)

SELECT * FROM tbl_order_details
    WHERE YEAR(orderDate) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
    AND MONTH(orderDate) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)

答案 1 :(得分:0)

在提及WHERE或JOIN'S中的列时,避免使用DATE(),MONTH(),DAY(),YEAR(),SUBSTR(),LEFT(),RIGHT(),LIKE),因为您将不再使用存在的索引在提到的列中。 例如:WHERE YEAR(orderDate)= ... 出于上述原因,请避免这样做。

我建议如下使用...

如果您的“ orderDate”列为日期类型,请执行以下操作:

SELECT COUNT(1) 
FROM tbl_order_details 
where merchantCode= '$user_code'
AND orderDate BETWEEN DATE_ADD(LAST_DAY(NOW() - INTERVAL 2 MONTH), INTERVAL 1 DAY)
AND LAST_DAY(DATE_ADD(LAST_DAY(NOW() - INTERVAL 2 MONTH), INTERVAL 1 DAY));

将返回上个月的第一天

DATE_ADD(LAST_DAY(NOW() - INTERVAL 2 MONTH), INTERVAL 1 DAY)

返回上个月的最后一天

LAST_DAY(DATE_ADD(LAST_DAY(NOW() - INTERVAL 2 MONTH), INTERVAL 1 DAY))

答案 2 :(得分:0)

要编写PHP代码,您可以通过使用strtotime函数从PHP本身获取月份和年份,具体取决于表的输入,然后在sql查询中对其进行格式化。例如:

<?php
$month = date("M", strtotime("previous month"));
$year = date("Y", strtotime("this year"));
$query_get = 'SELECT COUNT(1) FROM tbl_order_details where merchantCode= {$user_code} AND MONTH(orderDate) = {$month} AND YEAR(orderDate) = {$year}'
?>

然后进一步将$query_get传递给您的数据库查询以获取所需的结果。否则,您可以按照上面建议的@Rohit直推以下查询。

<?php
$query_get = 'SELECT * FROM tbl_order_details WHERE YEAR(orderDate) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(orderDate) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)'
?>