我有一个带有下表的WordPress数据库
帖子
+--------------+ | Field | +--------------+ | ID | | post_author | | post_title | | post_type | +--------------+
后元
+--------------+ | Field | +--------------+ | meta_id | | post_id | | meta_key | | meta_value | +--------------+
并有记录与meta_key值latitude和longitude
meta_key
latitude
longitude
如何编写SQL以显示列名latitude和longitude结果列名?
+--------------+ | Field | +--------------+ | ID | | post_author | | post_title | | latitude | | longitude | +--------------+
下面的查询是我的起点
SELECT ID, post_title, meta_key, meta_value FROM `wp_posts` LEFT JOIN `wp_postmeta` on ID=post_id WHERE post_type='place' AND (meta_key='latitude' OR meta_key='longitude') ORDER BY ID ASC
这听起来像你想PIVOT的latitude和longitude值。不幸的是,MySQL没有PIVOT函数,但是您可以使用带有以下CASE语句的聚合函数来复制它:
PIVOT
CASE
SELECT p.ID, p.post_title, p.post_author, max(case when pm.meta_key='latitude' then pm.meta_value end) latitude, max(case when pm.meta_key='longitude' then pm.meta_value end) longitude FROM `wp_posts` p LEFT JOIN `wp_postmeta` pm on p.ID=pm.post_id WHERE p.post_type='place' AND (pm.meta_key='latitude' OR pm.meta_key='longitude') GROUP BY p.ID, p.post_title, p.post_author ORDER BY p.ID ASC
参见带有演示的SQL Fiddle