2014-06-23 3 views
1

Wordpress 데이터베이스의 일부 사용자 정의 필드는 물론 게시물 세부 정보를 출력하려고합니다. 나는 사용자 정의 필드는 '미리보기'와 '비디오'Wordpress 데이터베이스의 단일 열에서 여러 값을 선택하십시오.

SELECT ID, post_title, post_content, wp_postmeta.meta_value 
FROM wp_posts 
INNER JOIN wp_postmeta ON wp_posts.id=wp_postmeta.post_id 
WHERE wp_postmeta.meta_key = "thumnail" 
OR wp_postmeta.meta_key = "video" 

지금까지이 같은 개별 행을 얻고있다 불렀다 :

| ID | Title  | Content  | Custom Fields      | 
|--------------------------------------------------------------------| 
| 234 | INCEPTION | Content etc | wp-content/thumbnail/inception.jpg | 
| 234 | INCEPTION | Content etc | wp-content/video/inception.flv  | 

을하지만 내가하고 싶은 것은 (즉, 포스트 당 하나 개의 라인)

|ID |Title  |Content  |Thumbnail     |Video      | 
|-----------------------------------------------------------------------------------| 
|234|INCEPTION |Content etc |wp-content/..inception.jpg |wp-content/..inception.flv | 

다른 값을 SELECT 문 내의 열로 분리하는 방법에 대해 조언 해 줄 수 있습니까?

+0

적절한 DDLs를 제공하는 고려 (및/또는 sqlfiddle)이 잘 작동 – Strawberry

답변

1

이 프로세스를 "피벗 테이블"또는 "크로스 탭 보고서"라고합니다. MySQL에는 PIVOT 명령이 없지만 수동으로 수행 할 수 있습니다. 두 가지 예가 있습니다. 첫 번째 예제에서는 IF statement을 사용하고 두 번째 예제에서는 CASE statement을 사용합니다. 그리고 aggregate function은 중복 행을 제거하는 데 사용됩니다.

SELECT ID, post_title, post_content, 
MAX(IF (wp_postmeta.meta_key = "thumnail", wp_postmeta.meta_value, '')) AS Thumbnail, 
MAX(IF (wp_postmeta.meta_key = "video", wp_postmeta.meta_value, '')) AS Video 
FROM wp_posts 
INNER JOIN wp_postmeta ON wp_posts.id=wp_postmeta.post_id 
WHERE wp_postmeta.meta_key IN ("thumnail", "video") 
GROUP BY ID 

SELECT ID, post_title, post_content, 
MAX(CASE WHEN wp_postmeta.meta_key = "thumnail" THEN wp_postmeta.meta_value ELSE '' END) AS Thumbnail, 
MAX(CASE WHEN wp_postmeta.meta_key = "video" THEN wp_postmeta.meta_value ELSE '' END) AS Video 
FROM wp_posts 
INNER JOIN wp_postmeta ON wp_posts.id=wp_postmeta.post_id 
WHERE wp_postmeta.meta_key IN("thumnail", "video") 
GROUP BY ID 
+0

감사합니다, 나는 당신이 MAX로하고있는 일의 논리를 파악하지 못할 제표 경우에 독서 후 함께 원하는 결과 세트, 작동하지만 왜 이해가 원하는가 ?? – user2894986

+0

집계 함수는 그룹화 할 때 GROUP BY 출력없이 중복 행을 가질 때 사용되며 MAX가 없으면 (SUM 또는 COUNT도 사용 가능) 빈 값을 갖습니다. [이] (http://stackoverflow.com/questions/1241178/mysql-rows-to-columns/9668036#9668036)에 대한 더 나은 설명에 대한 대답을 확인하십시오. – Danijel

+0

아하, 이해가된다 - 고마워. 여기에 게시 카테고리를 추가하는 방법에 대한 조언을 제공 할 수 있습니까? 답변에 ​​동일한 로직을 사용했지만 고유 값이 없으므로 (예 : meta_key) 모두가 '카테고리'입니다. 나는 처음에는 출력 할 수 있지만 모두를 출력 할 수는 없다. ... – user2894986

관련 문제