我有一个代码,假设连接到WordPress数据库,并从shop_order
(WooCommerce插件)获取自定义日期的_order_total
。下面是我的函数:
<?php
function get_total_income_a(){
global $wpdb;
return $wpdb->get_var( "
SELECT SUM(pm.meta_value)
FROM {$wpdb->prefix}posts as p
INNER JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
WHERE p.post_type = 'shop_order'
AND p.post_status IN ('wc-completed','wc-processing')
AND p.post_date BETWEEN '2023-09-01' AND '2023-09-02'
AND pm.meta_key = '_order_total'
" );
}
?>
这是回显总订单值的代码:
<?php echo strip_tags( get_total_income_a() ) ?>
这些代码对于代码中定义的日期工作正常。我有几个问题:
AND p.post_date BETWEEN '2023-09-01' AND '2023-09-02'
应该只选择一天。还有其他选择吗?我的意思是,而不是定义一个范围,我怎么能只输入一个日期。例如,如果我只想获取2023-09-01
日期的数据,该怎么办?只是为了速记。
1.正如你可以看到我的代码,它将返回数据只有一个日期。我想创建一个图表,需要30天的此值。因此,在一个非常初学者和简单的模式下,我必须每天复制一次此代码并更改日期!这意味着我必须复制上面的代码30次!有没有更简单、更轻松的方法来做到这一点?我的意思是保留一个SELECT
并仅使用以下代码从自定义日期获取数据:
// Get data for 2023-09-01:
<?php echo strip_tags( get_total_income_a('2023-09-01') ) ?>
// Get data for 2023-09-02:
<?php echo strip_tags( get_total_income_a('2023-09-02') ) ?>
// Get data for 2023-09-03:
<?php echo strip_tags( get_total_income_a('2023-09-03') ) ?>
// And so on until the end of the month
1条答案
按热度按时间dced5bon1#
关于你的第一个问题:由于'post_date'的类型是'datetime',并且您希望忽略时间部分以选择一整天,因此您可以使用字符串比较或强制转换为'date':
或
至于你的第二个问题,你只需要按post_date对结果进行分组。同样,由于这是一个datetime列,因此还需要将其转换为date:
当然,这将返回一个数组,所以你想使用'get_results'而不是'get_var'。要将post_date添加到结果集中,还需要将造型添加到select中:
因此完整的(未测试的)函数可能如下所示:
编辑:正如@CBroe在评论中指出的,在这种情况下,“DATE(p.post_date)”应该和“CAST(p.post_date AS DATE)”一样好用。