我需要显示两个表的内容;我的疑问是:
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)...
答案 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
子句中不在聚合函数中的列。