2012-12-17 44 views
0

我想將具有不同值的兩個相等列名(meta_value)合併爲一行結果而不是兩個。SQL將具有兩個不同值的兩個相等列名合併到一行中

SELECT t1.ID, t1.post_content AS product, t2.meta_value AS price 
FROM wp_posts AS t1 
INNER JOIN wp_postmeta AS t2 ON (t1.id = t2.post_id) 
WHERE t1.post_type = 'product' 
LIMIT 0 , 30 

結果

ID  product  price 
1973 product1  12.35 
1973 product1  12.10 

而且我希望它看起來像這樣

ID  product  price  sell 
1973 product1  12.35  12.10 

的meta_key價格是_price和賣出的meta_key是_sell

+0

什麼是問題嗎?你嘗試了什麼? – berty

回答

3

它看起來就像你可以使用帶case語句的聚合函數來轉換數據一樣

SELECT t1.ID, 
    t1.post_content AS product, 
    max(case when meta_key = '_price' then t2.meta_value end) AS price, 
    max(case when meta_key = '_sell' then t2.meta_value end) AS sell 
FROM wp_posts AS t1 
INNER JOIN wp_postmeta AS t2 ON (t1.id = t2.post_id) 
WHERE t1.post_type = 'product' 
GROUP BY t1.ID, t1.post_content 
LIMIT 0 , 30 

但它是不完全清楚的基礎上你的表結構,所以您可能還可以使用:

SELECT t1.ID, 
    t1.post_content AS product, 
    max(t2.meta_value) AS price, 
    min(t2.meta_value) AS sell 
FROM wp_posts AS t1 
INNER JOIN wp_postmeta AS t2 ON (t1.id = t2.post_id) 
WHERE t1.post_type = 'product' 
GROUP BY t1.ID, t1.post_content 
LIMIT 0 , 30 
+0

對不起。這似乎和我想要的完全一樣! – estrar

1
SELECT 
    t1.ID, 
    t1.post_content AS product, 
    max(case when t2.meta_key='_price' then t2.meta_value end) AS price, 
    max(case when t2.meta_key='_sell' then t2.meta_value end) AS sell 
FROM wp_posts AS t1 
    INNER JOIN wp_postmeta AS t2 ON (t1.id = t2.post_id) 
WHERE t1.post_type = 'product' 
GROUP BY t1.ID, t1.post_content 
LIMIT 0 , 30 
+0

@MahmoudGamal當我回答bluefeet的回答只有第二個查詢,我不知道是否永遠是正確的 – fthiella

0

希望這可以幫助你,

SELECT t1.ID, t1.post_content AS product,max(t2.meta_value) as price,min(t2.meta_value) as sell 
FROM wp_posts AS t1 
INNER JOIN wp_postmeta AS t2 ON (t1.id = t2.post_id) 
WHERE t1.post_type = 'product' 
LIMIT 0 , 30 
相關問題