从MySQL中的多个表中获取多行中的多个值

时间:2011-09-03 23:32:21

标签: mysql sql

我正在使用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”?

3 个答案:

答案 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', ...)