2017-02-04 9 views
0

は、私は1つの別の列に組み合わせIF()CONCAT()機能 を使用して、この文があることを考え出しました。私がしたいのは、 を2つの値にマージして、最初の値を列のように見せることです。 これは、これまでの私のSQLコードです:CONCAT(meta_key、meta_value)

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可能性があり、空の結果を得る場合には、= falseを返す「PROPERTY_ID」とあなたは常に得ることは同じように動作チェック – scaisEdge

答えて

0

は、FROM句にカンマを使用します。 常には、適切で明示的なJOIN構文を使用します。

だけWHERE句に条件を移動:私も、テーブルのほとんどが動作に必要ではないことに注意してください

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

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を使用あなたがやっている。 (悪い編集のため申し訳ありませんLuarb、)

おかげ

+0

感謝人のために「空「のiUsingしてみてください」」魅力は、wp.post_id pm.post_idではないので編集しました。ありがたいことに感謝します。D –

+0

この件に関するもう1つの質問は、この結果を列に格納し、別のmeta_key値を使用して同じことを行うことはできますか別の列?例:meta_key = porperty_idは列になり、meta_key = property_priceは別の1列などになります。 –

+0

@ LuBballa。 。 。私はあなたがサンプルデータと希望の結果で別の質問をするべきだと思います。 –