2017-02-04 1 views
0

는 난 내가 한 다른 컬럼에 결합 IF()CONCAT() 기능 를 사용하여이 문이 있다고 생각 에 직면하고있어 문제에 대한 몇 가지 연구를 만든 후. 내가 뭘하고 싶은지 하나에 두 값을 병합하고 첫 번째 값을 열처럼 보이게합니다.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 

그것은 비어있는 것으로 밝혀하지만 행를 잘 계산됩니다 : 이 지금까지 내 SQL 코드입니다.

+0

당신이 meta_key 수 빈 결과를 얻는 경우는 = false를 반환 'PROPERTY_ID'그리고 당신은 항상 얻을이 같이 작동 확인 – 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

감사의 남자 '빈'iusing 시도 '' 매력, 나는 wp.post_id pm.post_id가 아니기 때문에 그것을 편집 했으니 까, 고마워요. D –

+0

이 주제에 관한 또 다른 질문은,이 결과를 컬럼에 저장하고 또 다른 meta_key 값을 사용하여 같은 일을 할 수 있습니까? 다른 컬럼? 예 : meta_key = porperty_id는 하나의 열이되고 meta_key = property_price는 다른 하나의 열 등이됩니다. –

+0

@ LuerbBalla. . . 나는 샘플 데이터와 원하는 결과로 다른 질문을해야한다고 생각한다. –