CONCAT(meta_key,meta_value) 从 wp_postmeta table 到不同的列

CONCAT(meta_key,meta_value) into different columns from wp_postmeta table

在我对我面临的问题进行了一些研究之后 我想有这个语句使用 IF()CONCAT() 函数 合并到一个不同的列。我想做的是合并 两个值合二为一并使第一个值看起来像一列。 到目前为止,这是我的 sql 代码:

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

原来是空的,但是行算对了。

从不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,抱歉编辑不当)