将列的结果添加到另一列

时间:2013-04-04 19:05:41

标签: mysql sql wordpress

我需要显示两个表的内容;我的疑问是:

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 个答案:

答案 0 :(得分: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,并使用JOIN关键字改为使用ANSI-SQL-92语法,而不是像我所做的那样。

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