2017-02-04 60 views
0

後我做了關於我面對 我計算過,有使用IF()CONCAT()功能 組合成一個不同的列本聲明的問題的一些研究。我想要做的是將 兩個值合併爲一個,並使第一個值看起來像一列。 這是迄今爲止我的SQL代碼:CONCAT(meta_key,meta_value)成不同的列從wp_postmeta表

SELECT 
    IF(meta_key = 'property_id', 
     CONCAT(meta_key, ' ', meta_value), 
     '') AS property_id 
FROM 
    wp_postmeta, 
    wp_posts, 
    wp_terms, 
    wp_term_taxonomy, 
    wp_term_relationships 
WHERE 
    wp_term_relationships.object_id = wp_posts.ID 
     AND wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id 
     AND wp_term_taxonomy.term_id = wp_terms.term_id 
     AND wp_postmeta.post_id = wp_posts.ID 

它原來是空的,但行權數。

+0

,如果你獲得空的結果可能是meta_key =「PROPERTY_ID」返回false,你總是得到「」嘗試iusing「空」的檢查 – scaisEdge

回答

0

從不FROM條款中使用逗號。 始終使用使用正確的,明確的JOIN語法。

只需推動條件的WHERE條款:

SELECT CONCAT(meta_key, ' ', meta_value) AS property_id 
FROM wp_postmeta pm JOIN 
    wp_posts p 
    ON pm.post_id = p.ID JOIN 
    wp_term_relationships r 
    ON r.object_id = p.ID JOIN 
    wp_term_taxonomy tt 
    ON r.term_taxonomy_id = tt.term_taxonomy_id JOIN 
    wp_terms t 
    ON tt.term_id = t.term_id 
WHERE meta_key = 'property_id' 

或者刪除WHERE和使用CASE

SELECT (CASE WHEN meta_key = 'property_id' 
      THEN CONCAT(meta_key, ' ', meta_value) 
      ELSE '' -- Why not `NULL`? 
     END) as property_id 

我也注意到,大部分的表是沒有必要的操作你在做。

謝謝(Luarb,對不起,壞編輯)

+0

感謝的人它就像一個魅力,我編輯它,因爲它wp.post_id不是pm.post_id,沒關係只是非常感謝:D –

+0

關於這個問題的另一個問題,我可以將這個結果存儲到一列,而不是使用另一個meta_key值做同樣的事情另一列?例如:meta_key = porperty_id將成爲一列,meta_key = property_price另一列等。 –

+0

@LuarbBalla。 。 。我想你應該問一個關於樣本數據和期望結果的問題。 –