【发布时间】:2015-08-04 23:28:12
【问题描述】:
尽管谷歌搜索了 2 小时并尝试了各种 JOINS 和 UNIONS 和 ALIASES 等等,但我仍然无法在一个表中检索 WordPress 数据库中 wp_postmeta 表中两个子查询的结果(我什至没有这里关心wp_posts,我感兴趣的数据都在postmeta中)。
我在数据库中有如下所示的自定义字段(使用 ACF 插件管理),其中一个键用于区域,另一个键用于数值。
| ID | meta_key | meta_value |
| 1 | group_name | Japan |
| 1 | facility_index | 0.83 |
| 2 | group_name | USA |
| 2 | facility_index | 4.51 |
我需要一个返回以下内容的查询,以便我可以按地区计算聚合(例如,所有设施的设施索引总和,按国家/地区,即按组名):
| ID | group_name | facility_index |
| 1 | Japan | 0.83 |
| 2 | USA | 4.51 |
此查询列出了两次 group_name,而不是在第 3 列中列出了 facility_index:
SELECT post_id, meta_value, result2.meta_value FROM
(
(
SELECT post_id, meta_value
FROM wp_postmeta
WHERE meta_key = "group_name"
)
UNION
(
SELECT post_id, meta_value
FROM wp_postmeta
WHERE meta_key = "facility_index"
)
) AS result2
GROUP BY post_id
编辑以显示完全符合我要求的最终查询,这要感谢以下接受的答案:
SELECT
meta1.meta_value AS group_name,
meta2.meta_value AS facility_index,
SUM(meta2.meta_value) AS 'fac_index_geo'
FROM wp_posts post
LEFT JOIN wp_postmeta meta1 ON meta1.post_id = post.ID AND meta1.meta_key = 'group_name'
LEFT JOIN wp_postmeta meta2 ON meta2.post_id = post.ID AND meta2.meta_key = 'facility_index'
WHERE
post.post_type = 'facility'
GROUP BY group_name
【问题讨论】:
-
我的猜测是,任何关于 MySQL 和 Wordpress 或一般 EAV 模型的问题都会相当详尽地涵盖这一点
标签: mysql wordpress advanced-custom-fields