【问题标题】:Woocommerce Select Orders which match multiple meta valuesWoocommerce 选择匹配多个元值的订单
【发布时间】:2016-01-15 06:22:06
【问题描述】:

我目前正在开发一个插件,该插件是为一家面包店构建的,用于通过电子邮件发送有关订单的报告。此后,他们又开设了另一家商店,现在需要根据商店位置将报告拆分为单独的电子邮件。

我有以下 sql 查询:

$sql = "SELECT o.order_item_id, o.order_item_name, o.order_id, po.post_date AS order_date_placed
        FROM wp_woocommerce_order_items AS o
        LEFT JOIN wp_woocommerce_order_itemmeta AS oi ON o.order_item_id = oi.order_item_id
        LEFT JOIN wp_posts AS po ON po.ID = o.order_id
        WHERE oi.meta_key='Collection Date'
        AND oi.meta_value IN ('16/01/2016','17/01/2016','18/01/2016','19/01/2016','20/01/2016','21/01/2016')
        ORDER BY po.post_date ASC, o.order_item_id ASC";

此查询返回要在特定日期范围内收集的所有订单。

array (size=3)
  0 => 
    object(stdClass)[593]
      public 'order_item_id' => string '19582' (length=5)
      public 'order_item_name' => string '10 Chocolate Cupcakes' (length=21)
      public 'order_id' => string '15234' (length=5)
      public 'order_date_placed' => string '2016-01-14 08:51:31' (length=19)
  1 => 
    object(stdClass)[592]
      public 'order_item_id' => string '19600' (length=5)
      public 'order_item_name' => string '10 Chocolate Cupcakes' (length=21)
      public 'order_id' => string '15248' (length=5)
      public 'order_date_placed' => string '2016-01-14 15:43:08' (length=19)
  2 => 
    object(stdClass)[591]
      public 'order_item_id' => string '19603' (length=5)
      public 'order_item_name' => string '10 Chocolate Cupcakes' (length=21)
      public 'order_id' => string '15250' (length=5)
      public 'order_date_placed' => string '2016-01-14 15:45:25' (length=19)

我现在想传递一个附加条件,该条件也将返回数据限制到特定的商店位置。

我尝试将以下内容添加到查询中,但这会返回 null。

WHERE oi.meta_key = 'Pickup Location' 
AND oi.meta_value LIKE '%Address 1%'

只有同时满足两个条件的记录才能返回。

我确实努力理解为什么 wordpress/woocommerce 中的元表的设置方式与它们的方式相同,其中包含如此多的冗余/重复条目。

我不确定开发人员是否应该使用原始 SQL 查询,或者是否有更好的解决方案来解决这个问题。

非常感谢任何帮助。

【问题讨论】:

    标签: php mysql sql wordpress woocommerce


    【解决方案1】:

    我猜你正在寻找这个查询

    SELECT o.order_item_id, 
           o.order_item_name, 
           o.order_id, 
           po.post_date AS order_date_placed 
    FROM   wp_woocommerce_order_items AS o 
           LEFT JOIN wp_woocommerce_order_itemmeta AS oi 
                  ON ( o.order_item_id = oi.order_item_id 
                     AND oi.meta_key = 'Collection Date' 
                           AND oi.meta_value IN ( '16/01/2016', '17/01/2016','18/01/2016',
                                                  '19/01/2016','20/01/2016', '21/01/2016' ) ) 
                      OR ( oi.meta_key = 'Pickup Location' 
                           AND oi.meta_value LIKE '%Address 1%' ) 
           LEFT JOIN wp_posts AS po 
                  ON po.id = o.order_id 
    ORDER  BY po.post_date ASC, 
              o.order_item_id ASC 
    

    并将过滤器移动到ON 条件,因为它们属于右表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 2020-08-29
      • 1970-01-01
      • 2015-05-23
      • 2015-08-08
      • 1970-01-01
      相关资源
      最近更新 更多