SQL查询不应返回数据透视表

时间:2015-11-07 13:56:49

标签: mysql sql wordpress

我使用数据透视表创建了一个查询,以提取与帖子相关的纬度和经度值的一些元数据(来自我的wordpress数据库)。我只想返回包含这些特定元数据的帖子,并忽略所有其他帖子,但我无法过滤掉那些没有值或这些元键的帖子。这是我的SQL:

SELECT wp_posts.ID,   
wp_posts.post_title, wp_posts.post_modified_gmt,
MAX(CASE WHEN wp_postmeta.meta_key = "_wp_geo_longitude" then wp_postmeta.meta_value ELSE NULL END) as longitude,
MAX(CASE WHEN wp_postmeta.meta_key = "_wp_geo_latitude" then wp_postmeta.meta_value ELSE NULL END) as latitude
FROM wp_posts JOIN wp_postmeta  ON ( wp_postmeta.post_id = wp_posts.ID)  
WHERE wp_posts.post_status = 'publish'                  
GROUP BY wp_posts.ID, wp_posts.post_title;

我尝试将以下内容添加到WHERE子句中,但效果为零:

WHERE longitude IS NOT NULL
WHERE wp_postmeta.meta_value IS NOT NULL

并且有各种变化,但无论空值如何,所有帖子仍会被返回。

1 个答案:

答案 0 :(得分:1)

只需添加having子句:

having longitude is not null and latitude is not null

这种情况下join旋转方法可能更有效:

SELECT p.ID, p.post_title, p.post_modified_gmt,
       lng.meta_value as longitude, lat.meta_value as latitude
FROM wp_posts p JOIN
     wp_postmeta lat
     ON wp_postmeta.post_id = p.ID AND lat.meta_key = '_wp_geo_latiitude' JOIN
     wp_postmeta lng
     ON wp_postmeta.post_id = p.ID AND lng.meta_key = '_wp_geo_longitude'
WHERE p.post_status = 'publish';

一般来说,我更喜欢聚合方法而不是连接方法,因为它更灵活。但是,您只需要获得两个字段,以确保两者都存在。这意味着在这种情况下使用join的选项非常合理。