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,抱歉编辑不当)
在我对我面临的问题进行了一些研究之后
我想有这个语句使用 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,抱歉编辑不当)