如何过滤自定义查询?

时间:2017-04-10 09:56:02

标签: mysql sql woocommerce orders

如何在以下查询中过滤completed_date?

SELECT `wp_woocommerce_order_items`.order_id,
MAX(CASE WHEN `wp_postmeta`.`meta_key` = '_order_currency' THEN `wp_postmeta`.`meta_value`  END) AS order_currency,
MAX(CASE WHEN `wp_postmeta`.`meta_key` = '_order_total' THEN `wp_postmeta`.`meta_value`  END) AS order_total,
MAX(CASE WHEN `wp_postmeta`.`meta_key` = '_completed_date' THEN `wp_postmeta`.`meta_value`  END) AS completed_date
FROM wp_posts
LEFT JOIN `wp_woocommerce_order_items` ON `wp_posts`.`ID`= `wp_woocommerce_order_items`.`order_id` AND order_item_type = 'line_item'
LEFT JOIN `wp_postmeta` ON `wp_postmeta`.`post_id` = `wp_posts`.`ID`
LEFT JOIN `wp_woocommerce_order_itemmeta` ON `wp_woocommerce_order_itemmeta`.order_item_id = `wp_woocommerce_order_items`.order_item_id
WHERE `wp_posts`.`post_status` = 'wc-completed'
GROUP BY `wp_woocommerce_order_items`.order_item_id
ORDER BY completed_date DESC

更新

过滤前的

order_id,order_currency,order_total,completed_date
5338,USD,299.00,"2017-03-09 10:07:00"
5336,USD,15.00,"2017-03-04 03:54:41"
5335,USD,299.00,"2017-03-03 17:34:19"
5334,USD,15.00,"2017-03-01 12:30:54"
5333,USD,299.00,"2017-02-28 17:03:05"
5332,USD,15.00,"2017-02-25 12:04:10"
5330,USD,15.00,"2017-02-25 01:50:07"
5329,USD,129.00,"2017-02-25 01:48:36"
5328,USD,299.00,"2017-02-23 23:55:36"
5327,USD,39.00,"2017-02-23 16:06:00"
5326,USD,299.00,"2017-02-21 19:33:43"
5325,USD,15.00,"2017-02-19 15:35:34"
在2017-02-25和2017-02-28之间过滤后

order_id,order_currency,order_total,completed_date
5333,USD,299.00,"2017-02-28 17:03:05"
5332,USD,15.00,"2017-02-25 12:04:10"
5330,USD,15.00,"2017-02-25 01:50:07"
5329,USD,129.00,"2017-02-25 01:48:36"

另一个问题是“如何修改此查询以获得相同的结果?”因为它花了超过5秒。

1 个答案:

答案 0 :(得分:0)

禁食时将索引放在wp_postspost_status

for result:

SELECT `wp_woocommerce_order_items`.order_id,
 MAX(CASE WHEN `wp_postmeta`.`meta_key` = '_order_currency' THEN 
 `wp_postmeta`.`meta_value`  END) AS order_currency,
 MAX(CASE WHEN `wp_postmeta`.`meta_key` = '_order_total' THEN 
 `wp_postmeta`.`meta_value`  END) AS order_total,
 MAX(CASE WHEN `wp_postmeta`.`meta_key` = '_completed_date' THEN 
 `wp_postmeta`.`meta_value`  END) AS completed_date
 into #tempTable
 FROM wp_posts
LEFT JOIN `wp_woocommerce_order_items` ON `wp_posts`.`ID`= 
`wp_woocommerce_order_items`.`order_id` AND order_item_type = 
'line_item'
LEFT JOIN `wp_postmeta` ON `wp_postmeta`.`post_id` = `wp_posts`.`ID`
LEFT JOIN `wp_woocommerce_order_itemmeta` ON 
`wp_woocommerce_order_itemmeta`.order_item_id = 
`wp_woocommerce_order_items`.order_item_id
WHERE `wp_posts`.`post_status` = 'wc-completed'
  GROUP BY `wp_woocommerce_order_items`.order_item_id
  ORDER BY completed_date DESC

然后:

    declare @date1,date2
   set date1 ='2017-02-25 00:00:00'
   set date2 ='2017-02-28 00:00:00'

 select * from #tempTable 
 where completed_date>date1 and completed_date <=date2

 drop #tmpTable