2011-09-03 42 views
2

我正在使用WordPress。我想從wp_posts表中獲取一切,並從postmeta表中獲取兩個值。從MySQL中的多個表中獲取多個行的多個值

「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」?

回答

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'); 
+0

我得到的衣櫃是以下,但它仍然不起作用。 「選票」和「拇指」在MySQL輸出中具有相同的值:「SELECT wp_posts。*,wp_postmeta.meta_value AS votes,wp_postmeta.meta_value AS thumb FROM wp_posts INNER JOIN wp_postmeta ON(wp_posts.ID = wp_postmeta.post_id ) WHERE post_type = '後' 和wp_postmeta.meta_key IN( '票', '拇指' )' –

+0

你是什麼意思 '相同的值'?你說這是無效的嗎?哪裏有人提到他們需要有不同的「價值觀」?建議使用示例輸入和輸出值編輯您的問題。 –

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

(假設總有正好1排在wp_postmeta每條元的我沒有與WordPress不夠熟悉,知道這是否屬於這種情況。如果遇到。 adata是可選的,請改用LEFT OUTER JOIN。如果你可以有多個,你想要什麼樣的輸出?)