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)...
4

1 回答 1

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在查询中使用的旧语法;这是一个坏习惯,使用 ANSI-SQL-92 语法使用JOIN关键字而不是像我所做的那样。

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

于 2013-04-04T19:09:03.403 回答