我正在使用WordPress。我想从wp_posts
表中获取所有内容,从postmeta
表中获取两个值。
“wp_postmeta”包含“post_id”,“meta_key”和“meta_value”列。
到目前为止,我能够获得一个“meta_value”:
SELECT wp_post.*, $wpdb->postmeta.meta_value AS votes
FROM wp_posts
INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )
WHERE post_type='post'
AND wp_postmeta.meta_key = 'votes'
但是,我还希望获得另一个“meta_value”,其中包含相同的“post_id”,但是不同的“meta_key”。如何将此查询扩展到“meta_value”?
答案 0 :(得分:3)
如果您不希望每个帖子有多行,则可以通过多个联接来执行此操作:
SELECT wp_post.*, metavotes.meta_value AS votes, metaother.meta_value AS other
FROM wp_posts
INNER JOIN wp_postmeta metavotes
ON ( wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = 'votes')
INNER JOIN wp_postmeta metaother
ON ( wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = 'other')
WHERE post_type='post'
(这假设wp_postmeta中的每个元数据总是只有1行。我不熟悉wordpress以了解是否是这种情况。如果元数据是可选的,请使用LEFT OUTER JOIN代替。如果可以的话有多个,你想要什么样的输出?)
答案 1 :(得分:2)
如何使用IN
子句将其他meta_key添加到查询中。假设您要添加字符串值foo
:
SELECT wp_post.*, $wpdb->postmeta.meta_value AS votes
FROM wp_posts
INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )
WHERE post_type='post'
AND wp_postmeta.meta_key IN ('votes', 'foo');
答案 2 :(得分:0)
也许尝试这样的事情:
SELECT wp_posts.*, wp_postmeta.meta_value, wp_postmeta.meta_key
FROM wp_posts INNER JOIN wp_postmeta ON(wp_posts.ID = wp_postmeta.post_id)
WHERE wp_posts.post_type='post'
AND wp_postmeta.meta_key IN ('votes', ...)