尝试添加要查询的日期范围

Trying to add date range to query

我在 OpenCart 工作,正在尝试更改此查询。我需要更改它,以便它 returns 记录去年(1 年后)这是我的查询

$query = $this->db->query("SELECT count(*) AS total, channel FROM `" . DB_PREFIX . "order` WHERE customer_id = '" . (int)$customer_id . "' && order_status_id IN(" . implode(",", $implode) . ") AND YEAR(date_added) = YEAR(CURDATE()) GROUP BY channel");

我试着把它改成这个,但它不起作用:

$query = $this->db->query("SELECT count(*) AS total, channel FROM `" . DB_PREFIX . "order` WHERE customer_id = '" . (int)$customer_id . "' && order_status_id IN(" . implode(",", $implode) . ") AND date_added BETWEEN CURDATE() - INTERVAL 1 year AND CURDATE()) GROUP BY channel");

之前,请考虑清理您的输入数据以保护您的查询免受 SQL 注入。 Here您可以找到有关此主题的一些内容。

基于 this answer,我们可以将您的 PHP 代码调整为以下内容:

$query = $this->db->query("SELECT count(*) AS total, channel 
               FROM `" . DB_PREFIX . "order` 
               WHERE customer_id = '" . (int)$customer_id . "' 
                 AND order_status_id IN(" . implode(",", $implode) . ")
                 AND date_added >= DATE_SUB(NOW(),INTERVAL 1 YEAR)
               GROUP BY channel");

你在计算去年时语法错误。

您可以使用 DATE_SUB.

$query = $this->db->query("SELECT count(*) AS total, channel FROM `" . DB_PREFIX . "order` WHERE customer_id = '" . (int)$customer_id . "' && order_status_id IN(" . implode(",", $implode) . ") AND date_added BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 YEAR) AND CURDATE()) GROUP BY channel");