Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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
Mysql 基于动态日期范围的Post元数据查询_Mysql_Wordpress_Woocommerce_Metadata - Fatal编程技术网

Mysql 基于动态日期范围的Post元数据查询

Mysql 基于动态日期范围的Post元数据查询,mysql,wordpress,woocommerce,metadata,Mysql,Wordpress,Woocommerce,Metadata,我希望修改默认的woocommerce Subscriptions by Product SQL查询,以仅反映在未来7天内具有meta key=\u schedule\u next\u payment和meta value的订阅的订阅产品计数。这样做的原因是我每周交付产品,并试图预测下周可能订购的所有产品 我添加了以下查询段 LEFT JOIN ( SELECT * FROM {$wpdb->posts} as subscri

我希望修改默认的woocommerce Subscriptions by Product SQL查询,以仅反映在未来7天内具有meta key=\u schedule\u next\u payment和meta value的订阅的订阅产品计数。这样做的原因是我每周交付产品,并试图预测下周可能订购的所有产品

我添加了以下查询段

LEFT JOIN (
                SELECT *
                FROM {$wpdb->posts} as subscriptionjk
                INNER JOIN {$wpdb->postmeta} AS postmeta
                    ON subscriptionjk.id = postmeta.post_id
                WHERE postmeta.meta_key = '_schedule_next_payment'
                    AND postmeta.meta_value BETWEEN '2020-09-07 00:00:00' AND '2020-09-14 00:00:00'
在wcs report subscriptions by product类的默认woocommerce查询中,该查询生成subscriptions by product报告

"SELECT product.id as product_id,
                product.post_parent as parent_product_id,
                product.post_title as product_name,
                mo.product_type,
                COUNT(subscription_line_items.subscription_id) as subscription_count,
                SUM(subscription_line_items.product_total) as recurring_total
            FROM {$wpdb->posts} AS product
            LEFT JOIN (
                SELECT tr.object_id AS product_id, t.slug AS product_type
                FROM {$wpdb->prefix}term_relationships AS tr
                INNER JOIN {$wpdb->prefix}term_taxonomy AS x
                    ON ( x.taxonomy = 'product_type' AND x.term_taxonomy_id = tr.term_taxonomy_id )
                INNER JOIN {$wpdb->prefix}terms AS t
                    ON t.term_id = x.term_id
            ) AS mo
                ON product.id = mo.product_id
            LEFT JOIN (
                SELECT wcoitems.order_id as subscription_id, wcoimeta.meta_value as product_id, wcoimeta.order_item_id, wcoimeta2.meta_value as product_total
                FROM {$wpdb->prefix}woocommerce_order_items AS wcoitems
                INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS wcoimeta
                    ON wcoimeta.order_item_id = wcoitems.order_item_id
                INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS wcoimeta2
                    ON wcoimeta2.order_item_id = wcoitems.order_item_id
                WHERE wcoitems.order_item_type = 'line_item'
                    AND ( wcoimeta.meta_key = '_product_id' OR wcoimeta.meta_key = '_variation_id' )
                    AND wcoimeta2.meta_key = '_line_total'
            ) as subscription_line_items
                ON product.id = subscription_line_items.product_id
            LEFT JOIN (
                SELECT *
                FROM {$wpdb->posts} as subscriptionjk
                INNER JOIN {$wpdb->postmeta} AS postmeta
                    ON subscriptionjk.id = postmeta.post_id
                WHERE postmeta.meta_key = '_schedule_next_payment'
                    AND postmeta.meta_value BETWEEN '2020-09-07 00:00:00' AND '2020-09-14 00:00:00'
            ) as subscriptions
                ON subscriptions.ID = subscription_line_items.subscription_id
            WHERE product.post_status = 'publish'
                 AND ( product.post_type = 'product' OR product.post_type = 'product_variation' )
                 AND subscriptions.post_type = 'shop_subscription'
                 AND subscriptions.post_status NOT IN( 'wc-pending', 'trash' )
            GROUP BY product.id
            ORDER BY COUNT(subscription_line_items.subscription_id) DESC" );
有了这个功能,它就可以正常工作,并提供我想要的结果。然而,我已经尝试过使用堆栈溢出问题的指导,用一个BETWEEN函数替换那些硬编码的日期,并且使用不同的配置,我尝试过它不会产生任何结果

我试过这个:

AND postmeta.meta_value BETWEEN GETDATE() AND DATEADD(day, -7, GETDATE())

以下是有效的解决方案:

LEFT JOIN (
                SELECT *
                FROM {$wpdb->posts} as subscriptionjk
                INNER JOIN {$wpdb->postmeta} AS postmeta
                    ON subscriptionjk.id = postmeta.post_id
                WHERE postmeta.meta_key = '_schedule_next_payment'
                    AND postmeta.meta_value BETWEEN CURDATE() AND (CURDATE() + INTERVAL 7 DAY)
            ) as subscriptions
                ON subscriptions.ID = subscription_line_items.subscription_id

顺便说一句,考虑到子查询中没有聚合,它们实际上不需要是子查询,并且您正在为mo.product_type.Hey@草莓返回一个任意(“不确定”)值,谢谢您的回复。我不知道如何运用你说的话。您的评论是对查询的一般性反馈,还是关于如何为元键添加所需过滤器的建议/相关?我更新了问题,使其更加具体,并反映了我编写的SQL查询的一个新部分,这也是我的一部分。一位朋友@Kirit Dholakiya帮助我解决了这个问题。下面是解决方案