2014-06-23 94 views
1

我試圖輸出帖子的詳細信息以及wordpress數據庫中的一些自定義字段。 我已經自定義字段稱爲「縮略圖」和「視頻」從Wordpress數據庫中的單個列中選擇多個值

SELECT ID, post_title, post_content, wp_postmeta.meta_value 
FROM wp_posts 
INNER JOIN wp_postmeta ON wp_posts.id=wp_postmeta.post_id 
WHERE wp_postmeta.meta_key = "thumnail" 
OR wp_postmeta.meta_key = "video" 

到目前爲止,我越來越喜歡這個人行:

| ID | Title  | Content  | Custom Fields      | 
|--------------------------------------------------------------------| 
| 234 | INCEPTION | Content etc | wp-content/thumbnail/inception.jpg | 
| 234 | INCEPTION | Content etc | wp-content/video/inception.flv  | 

但我想是(即平均每個職位一行)

|ID |Title  |Content  |Thumbnail     |Video      | 
|-----------------------------------------------------------------------------------| 
|234|INCEPTION |Content etc |wp-content/..inception.jpg |wp-content/..inception.flv | 

有人可能會建議如何將不同的值分隔到SELECT語句中的列中嗎?

+0

考慮提供適當的DDL(和/或sqlfiddle)連同所需的結果集 – Strawberry

回答

1

這個過程被稱爲「數據透視表」或「交叉表報告」。 MySQL中沒有PIVOT命令,但可以手動完成,這裏有兩個例子。第一個例子使用IF statement,第二個例子使用CASE statementaggregate function用於擺脫重複的行。

SELECT ID, post_title, post_content, 
MAX(IF (wp_postmeta.meta_key = "thumnail", wp_postmeta.meta_value, '')) AS Thumbnail, 
MAX(IF (wp_postmeta.meta_key = "video", wp_postmeta.meta_value, '')) AS Video 
FROM wp_posts 
INNER JOIN wp_postmeta ON wp_posts.id=wp_postmeta.post_id 
WHERE wp_postmeta.meta_key IN ("thumnail", "video") 
GROUP BY ID 

SELECT ID, post_title, post_content, 
MAX(CASE WHEN wp_postmeta.meta_key = "thumnail" THEN wp_postmeta.meta_value ELSE '' END) AS Thumbnail, 
MAX(CASE WHEN wp_postmeta.meta_key = "video" THEN wp_postmeta.meta_value ELSE '' END) AS Video 
FROM wp_posts 
INNER JOIN wp_postmeta ON wp_posts.id=wp_postmeta.post_id 
WHERE wp_postmeta.meta_key IN("thumnail", "video") 
GROUP BY ID 
+0

感謝這個偉大工程,在if語句我無法弄清楚你與MAX做什麼邏輯讀了之後,作品,但想明白爲什麼? – user2894986

+0

分組時使用聚合函數,如果沒有GROUP BY輸出將有重複的行,並且沒有MAX(SUM或COUNT也可以使用),它將具有空值。檢查[這](http://stackoverflow.com/questions/1241178/mysql-rows-to-columns/9668036#9668036)回答更好的解釋。 – Danijel

+0

啊哈,有道理 - 謝謝。雖然在這裏,你能否提供關於如何添加帖子類別的建議 - 我在回答中使用了相同的邏輯,但由於沒有獨特的價值(即在meta_key中),它們都只是'類別'。我可以輸出第一個,但不是全部... – user2894986