2013-04-04 71 views
1

我需要显示两个表的内容;我的查询是这样的:添加列的结果另一列

SELECT ID, 
    post_author, 
    post_content, 
    post_title, 
    post_name, 
    guid, 
    post_type, 
    meta_id, 
    post_id, 
    meta_key, 
    meta_value 
FROM wp_posts, 
    wp_postmeta 
WHERE wp_posts.ID = wp_postmeta.post_id 
    AND post_author IN (2); 

的meta_key列存储的内容的类型,我需要一个像网站,纬度,经度,电话,电子邮件。有没有办法让这个列爆炸到另一列?例如:

ID, 
post_author, 
..., 
meta_id, 
post_id, 
meta_key, 
meta_value, 
website(its a meta_key result), 
latitude(another meta_key result), 
longitude(anoter meta_key result)... 

回答

1

目前尚不清楚什么是你想这样做,但我认为你需要显示的元键和值列与元值,作为每个列的值头。在这种情况下,你可以做这样的事情:

SELECT 
    ID, 
    post_author, 
    post_content, 
    post_title, 
    post_name, 
    guid, 
    post_type, 
    meta_id, 
    post_id, 
    MAX(CASE WHEN meta_key = 'website' THEN meta_value END) AS website, 
    MAX(CASE WHEN meta_key = 'latitude' THEN meta_value END) AS latitude, 
    MAX(CASE WHEN meta_key = 'longitude' THEN meta_value END) AS longitude, 
    ... 
FROM wp_posts 
INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id 
WHERE post_author IN (2) 
GROUP BY Id, post_author, ... 

注意事项:

  • 尽量避免您在查询中使用的旧JOIN语法; it is a bad habit,并使用关键字使用ANSI-SQL-92语法,而不是像我所做的那样。

  • 我使用MAX作为解决方法将行转换为列,您需要列出GROUP BY子句中不在聚合函数中的列。

+0

看看这个截图,在那里你可以看到geo_latitude和geo_longitude作为meta_key的结果,我想让它显示在另一列......这可能吗? http://img856.imageshack.us/img856/4562/query.jpg – 2013-04-04 19:21:58

+0

@JefersonSantos - 是的,这是我的查询做什么。你试过了吗? – 2013-04-04 19:25:55

+0

喔我忘了告诉,在meta_value有相关meta_key值,所以我whant做出geo_latitude柱从截图中meta_value行的数据,但在分隔的列,如: | ID | post_author | ... | geo_latitude | geo_longitude | ... | 5281 | 3 | ... | -56.0 ....... | 15.62 ........ | ... 屏幕上的查询是我的第一篇查询。 其中wp_posts.ID = wp_postmeta.post_id和post_author在(3) – 2013-04-04 19:36:31