2013-10-29 49 views
0

我目前正在使用以下代碼來獲取帖子列表,顯示post_name,post_content和post_id,其中存在自定義字段(meta_key)使用名爲MediaLink。如何將相同的列值分組並映射到具有相應值的新列中

SELECT wp_posts.post_name, wp_posts.post_content, wp_posts.ID 
FROM wp_posts, wp_postmeta 
WHERE wp_posts.ID = wp_postmeta.post_id 
AND wp_postmeta.meta_key = "MediaLink" 

下面是從我的查詢當前表的直觀例子:

POST_NAME | post_content | post_id |


Name 1   Content 1  1 
Name 2   Content 2  2 

我想下面的表格有:

POST_NAME | post_content | post_id |藝術家|監製


Name 1   Content 1  1  Madonna Philip  
Name 2   Content 2  2  Prince  Jack 

的問題是,藝術家&生產商目前在wp_postmeta表:

meta_key | meta_value | post_id | meta_id | 
___________________________________________ 
Artist  Madonna   1   1 
Artist  Prince   2   2 
Producer Philip   1   3 
Producer Jack   2   4 

我怎麼添加到我的初步查詢,先查詢做到這一點?

我想顯示發佈行的製作人和藝術家列,這兩個行都沒有填寫Artist和Producer字段。

這樣我就可以用PhpMyAdmin將這些數據導出到CSV並更新上千個帖子,一次性影響我需要的每個帖子的所有字段。

回答

0

像這樣的東西應該做的伎倆(我不能沒有你的數據正確測試,所以讓你得到任何奇怪的結果我知道了):

SELECT p.post_name, 
     p.post_content, 
     p.ID, 
     art.meta_value as artist, 
     prd.meta_value as producer 
FROM wp_posts p 
     JOIN wp_postmeta pm on p.ID = pm.post_id 
     LEFT JOIN wp_postmeta art on p.ID = art.post_id and art.meta_key = 'Artist' 
     LEFT JOIN wp_postmeta prd on p.ID = prd.post_id and prd.meta_key = 'Producer' 
WHERE pm.meta_key = "MediaLink" 

通過解釋,你可以使用如果你給它一個別名,在查詢中查幾次。我在不同的條件下使用pm,artprd來引用wp_postmeta

我改變了你的語法爲ANSI連接語法,因爲我發現它更容易看到發生了什麼:連接條件與條件是分開的(儘管在藝術家和生產者條件下有一個灰色區域 - 見下文)。

既然你說

我想,以示對交行,無論 做,沒有歌手和製作領域充滿了沒有生產者和藝術家列。

我做出了加盟LEFT JOIN s,這將始終從返回左表中的行,右表中添加NULL如果該行不存在。我將藝術家/製作人置於連接條件中,而不是WHERE子句,因爲它在連接後進行評估,您將失去這些NULL記錄。

+0

這是正確的!謝謝。我的下一步是在運行查詢和正確的結果後,點擊PhpMyAdmin中的導出,使用csv formart,在excel中編輯並導入到我的主數據庫表中? (麪包屑說它是從中導出的) –

相關問題