【问题标题】:CONCAT(meta_key,meta_value) into different columns from wp_postmeta tableCONCAT(meta_key,meta_value) 到 wp_postmeta 表中的不同列
【发布时间】:2017-06-21 20:09:37
【问题描述】:

在我对我面临的问题进行了一些研究之后 我认为有这个语句使用 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

结果是空的,但行数正确。

【问题讨论】:

  • 如果你得到空结果可能是 meta_key = 'property_id' 返回 false 并且你总是得到 '' try iusing 'empty' for check

标签: mysql wordpress if-statement concat


【解决方案1】:

永远不要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,抱歉编辑不好)

【讨论】:

  • 谢谢,它就像一个魅力,我编辑它,因为它 wp.post_id 不是 pm.post_id ,没关系,非常感谢:D
  • 关于这个主题的另一个问题,我可以将这个结果存储到一个列中,而不是使用另一个 meta_key 值在另一个列中做同样的事情吗?示例:meta_key = porperty_id 将是一列,而 meta_key = property_price 是另一列等等。
  • @LuarbBalla 。 . .我认为您应该用样本数据和期望的结果提出另一个问题。
猜你喜欢
  • 2020-04-21
  • 2017-03-05
  • 2017-08-07
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2013-04-08
相关资源
最近更新 更多