2013-04-04 65 views
1

我需要顯示兩個表的內容;我的查詢是這樣的:添加列的結果另一列

SELECT ID, 
    post_author, 
    post_content, 
    post_title, 
    post_name, 
    guid, 
    post_type, 
    meta_id, 
    post_id, 
    meta_key, 
    meta_value 
FROM wp_posts, 
    wp_postmeta 
WHERE wp_posts.ID = wp_postmeta.post_id 
    AND post_author IN (2); 

的meta_key列存儲的內容的類型,我需要一個像網站,緯度,經度,電話,電子郵件。有沒有辦法讓這個列爆炸到另一列?例如:

ID, 
post_author, 
..., 
meta_id, 
post_id, 
meta_key, 
meta_value, 
website(its a meta_key result), 
latitude(another meta_key result), 
longitude(anoter meta_key result)... 

回答

1

目前尚不清楚什麼是你想這樣做,但我認爲你需要顯示的元鍵和值列與元值,作爲每個列的值頭。在這種情況下,你可以做這樣的事情:

SELECT 
    ID, 
    post_author, 
    post_content, 
    post_title, 
    post_name, 
    guid, 
    post_type, 
    meta_id, 
    post_id, 
    MAX(CASE WHEN meta_key = 'website' THEN meta_value END) AS website, 
    MAX(CASE WHEN meta_key = 'latitude' THEN meta_value END) AS latitude, 
    MAX(CASE WHEN meta_key = 'longitude' THEN meta_value END) AS longitude, 
    ... 
FROM wp_posts 
INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id 
WHERE post_author IN (2) 
GROUP BY Id, post_author, ... 

注意事項:

  • 儘量避免您在查詢中使用的舊JOIN語法; it is a bad habit,並使用關鍵字使用ANSI-SQL-92語法,而不是像我所做的那樣。

  • 我使用MAX作爲解決方法將行轉換爲列,您需要列出GROUP BY子句中不在聚合函數中的列。

+0

看看這個截圖,在那裏你可以看到geo_latitude和geo_longitude作爲meta_key的結果,我想讓它顯示在另一列......這可能嗎? http://img856.imageshack.us/img856/4562/query.jpg – 2013-04-04 19:21:58

+0

@JefersonSantos - 是的,這是我的查詢做什麼。你試過了嗎? – 2013-04-04 19:25:55

+0

喔我忘了告訴,在meta_value有相關meta_key值,所以我whant做出geo_latitude柱從截圖中meta_value行的數據,但在分隔的列,如: | ID | post_author | ... | geo_latitude | geo_longitude | ... | 5281 | 3 | ... | -56.0 ....... | 15.62 ........ | ... 屏幕上的查詢是我的第一篇查詢。 其中wp_posts.ID = wp_postmeta.post_id和post_author在(3) – 2013-04-04 19:36:31