mysql - 合并 2 个 SQL 查询。

标签 mysql sql wordpress

我正在编写(或者我应该说重新编写)一个 Wordpress 插件。

我有这个查询使用 meta.key: '_rl_distance_value':

SELECT DATE_FORMAT( wp_posts.post_date, '%Y' ) AS Runyear, MONTH( wp_posts.post_date ) AS Runmonth, SUM( wp_postmeta.meta_value ) AS Distance
FROM wp_postmeta
INNER JOIN wp_posts ON ( wp_postmeta.post_id = wp_posts.id )
WHERE wp_postmeta.meta_key = '_rl_distance_value'
AND wp_posts.post_status = 'publish'
AND wp_postmeta.post_id = wp_posts.id
AND year(wp_posts.post_date)= '2010'
GROUP BY DATE_FORMAT( wp_posts.post_date, '%Y-%m' )

它打印出这样的东西:

Runyear     Runmonth    Distance    
2010    1   76260
2010    2   88670
2010    3   106490
2010    4   57199
2010    5   66460
2010    6   84480
2010    7   54490
2010    8   45090
2010    9   27140
2010    10  70600
2010    11  51000

我还有这个查询,使用 meta.key: '_rl_time_value' 获取每个月运行的总时间

SELECT DATE_FORMAT( wp_posts.post_date, '%Y-%m' ) AS Runyear, MONTH( wp_posts.post_date ) AS Runmonth, ((SUM( time_to_sec( STR_TO_DATE( wp_postmeta.meta_value, '%T' ) ) ) )/3600) AS Runtimetotal
FROM wp_postmeta
INNER JOIN wp_posts ON ( wp_postmeta.post_id = wp_posts.id )
WHERE wp_postmeta.meta_key = '_rl_time_value'
AND wp_posts.post_status = 'publish'
AND year(wp_posts.post_date)= '2010'
GROUP BY DATE_FORMAT( wp_posts.post_date, '%Y-%m' )

它打印出类似的东西:

Runyear     Runmonth    Runtimetotal    
2010-01     1   7.8928
2010-02     2   9.1667
2010-03     3   10.7083
2010-04     4   5.7497
2010-05     5   6.9561
2010-06     6   8.5594
2010-07     7   5.5767
2010-08     8   4.6139
2010-09     9   2.7233
2010-10     10  7.3953
2010-11     11  4.5858

如何将这两个查询合并成这样的结构

Runyear     Runmonth    Distance    Runtimetotal 

我不知道该怎么做?

你能帮忙吗?

最佳答案

我认为你可以只使用条件聚合:

SELECT DATE_FORMAT( p.post_date, '%Y-%m' ) AS Runyear,
       MONTH( p.post_date ) AS Runmonth,
       SUM(CASE WHEN pm.meta_key = '_rl_distance_value' THEN wp_postmeta.meta_value END) AS Distance,          
       SUM(time_to_sec(STR_TO_DATE(CASE WHEN pm.meta_key = '_rl_time_value' THEN pm.meta_value END, '%T')))/3600 AS Runtimetotal
FROM wp_postmeta pmm INNER JOIN
     wp_posts p
     ON pm.post_id = p.id
WHERE pm.meta_key IN ('_rl_distance_value', '_rl_time_value') AND
      p.post_status = 'publish' AND
      year(p.post_date)= 2010
GROUP BY DATE_FORMAT(p.post_date, '%Y-%m' )

关于mysql - 合并 2 个 SQL 查询。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51590925/

相关文章:

php - 或者在带有子查询的 Laravel 查询生成器中的 WHERE IN

MySQL 多对多选择 - 最佳实践

mysql - Spring 测试 - 回滚问题

sql - 如何使 MySQL MAX() 将 NULL 视为最小可能值?

mysql - ORDER BY 真值

php - 根据 Woocommerce 中的产品类别添加到购物车的最大商品数量

java - JPA - 通过外键获取数据

sql - 处理 PostgreSQL 外键错误和。防止它们发生

jquery - 如何在 wordpress 上创建具有更多浏览量的幻灯片图像

wordpress - 如何在wordpress主题选项中添加颜色选择器