mysql - 如何过滤自定义查询?

标签 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 秒。

最佳答案

为了禁食,它将索引放在 wp_posts 上。post_status

对于结果:

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

关于mysql - 如何过滤自定义查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43320116/

相关文章:

mysql - 如何使 SELECT "knows"哪个实体有更多元素?

php - WooCommerce:获取 SQL 查询中产品变体的总销售额

php - 更新购物车后自动从购物车重定向到结账

python - 在 CentOS 上为 Django 项目安装 python 3.6 mysqlclient

php - 如何将这个php slugify函数重写到mysql?

mysql - 与使用完整的 MySQL 相比,使用独立的 SQL 文件是否有风险?

php - 从 Woocommerce 中的产品 ID 列出产品类别层次结构

mysql - 递归查询性能问题

javascript - 如何从 JSON 中统计具体的值

MySql - 无法对 varchar 列进行排序?