2014-05-13 4 views
-1

3 개의 테이블이 있습니다. 한 사용자는 사용자 이름을 저장하는 사용자를 호출했습니다. 다른 스토어의 게시물 (소식 유형, 날짜 등)입니다. 세 번째 테이블은 다른 metakeys 및 값을 acostibg로 typing 할 수 있습니다. 각 사용자의 게시물을 요약하려면 다음과 같이하십시오. meta 키와 그의 게시물과 관련된 값이 오는 이름을 갖습니다. 여러 조인을 찾기는 어렵지만 하루 종일 실패합니다.다른 테이블의 값을 기반으로 한 테이블의 데이터를 요약하는 방법은 무엇입니까?

나는 장난 결과를 반환하는 쿼리를하고 싶은

(예 한 줄을 보여 주지만, 각 날짜에 대해 한 줄을 가질 수) http://sqlfiddle.com/#!8/cc7cd/2/0http://sqlfiddle.com/#!8/cc7cd/3/0을 :

내 표는 링크 주문에 따라 있습니다

User display name  date (meta-key = data_de_inicio_do_servico) date (meta-key = turno)  number of days (count number of instances that each user was found in that meta_key = data_de_inicio_do_servico) 

1S BMT LEVI José da Silva Melo   07/05/2014      06:45 às 15:45            1 
+0

3 개의 검색어 모두에 대해 서로 다른 열 라벨을 사용하기 때문에 혼란스러운 질문입니다. – Pat

+0

테이블을 조인하고 별칭을 지정할 수 있습니다. 테이블 구조가 매우 복잡하고 SQLFiddle이 없으면 아무도 좋은 대답을 줄 수 없습니다. – smcjones

답변

0

명확히하기 위해 세 쿼리 사이에 공용체를 만들려고합니까? 조인 이라기보다는? 예를 들어

, 먼저

select 
    wp_posts.ID 
    , wp_postmeta.meta_key 
    , wp_postmeta.meta_value 
from wp_posts 
LEFT JOIN wp_postmeta 
    ON wp_postmeta.post_id = wp_posts.ID 
where 
    wp_posts.post_type like '%_an' AND 
    (wp_postmeta.meta_key = 'data_de_inicio_do_servico' OR 
    wp_postmeta.meta_key = 'turno') AND 
    wp_postmeta.meta_value not like '' 
union all 
select 
    wp_postmeta.post_id as ID, 
    wp_postmeta.meta_key , 
    wp_postmeta.meta_value 
from wp_postmeta 
where (wp_postmeta.meta_key like '%ATCO%' or wp_postmeta.meta_key like 'operador%') 
AND wp_postmeta.meta_value in (select wp_users.display_name from wp_users) 
+0

총 7 열을 갖고 싶습니다 ... – Ghuerren

+0

가입, 조합이 아닌 – Ghuerren

+0

사과드립니다. 열 별칭을 간과했습니다. 내 반응 무시 :) –

0

, 난 쉽게 처음 두 얻을 수 있지만, 약간 읽기 쉽도록 별칭을 단순화 할 수 있습니다. wp_POSTS 테이블의 경우 "p"이고 첫 번째 게시 메타 데이터 테이블의 경우 "pm1"이고 두 번째 게시자의 경우 "pm2"입니다. 마지막으로 "pm3"은 조금 더 노력했지만 ... 나는 "and IN"에서 users 테이블을 왼쪽 조인으로 바꿨지 만, 당신이 원하는 경우 조인으로 변경할 수 있습니다. pm3 별칭이 나타내는 것처럼 "users"테이블과 연결됩니다.

이것은 아마도 당신이 찾고있는 것에 거의 가깝습니다.

SELECT 
     p.ID, 
     pm1.meta_key AS 'Date of duty', 
     pm1.meta_value AS 'Date', 
     pm2.meta_key AS 'Turn of duty', 
     pm2.meta_value AS 'Turn', 
     pm3.meta_key AS 'Operator', 
     pm3.meta_value AS 'Name' 
    from 
     wp_posts p 
     LEFT JOIN wp_postmeta pm1 
      ON p.ID = pm1.post_id 
      AND pm1.meta_key = 'data_de_inicio_do_servico' 
      AND pm1.meta_value not like '' 

     LEFT JOIN wp_postmeta pm2 
      ON p.ID = pm2.post_id 
      and pm2.meta_key = 'turno' 
      AND pm2.meta_value not like '' 

     LEFT JOIN wp_postmeta pm3 
      ON p.ID = pm3.post_id 
      and ( pm3.meta_key like '%ATCO%' 
       or pm3.meta_key like 'operador%') 
      LEFT JOIN wp_users u 
       ON wp3.meta_value = u.display_name 
    where 
     p.post_type like '%_an' 
    order by 
     p.post_date DESC 
쿼리를 최적화 할 수 있도록

, 나는 ((DISPLAY_NAME)에 (post_id를, meta_key) wp_users 테이블 (post_type, POST_DATE, ID) wp_postmeta 테이블에 당신의 wp_posts 테이블에 인덱스를 가질 것입니다 당신이 경우

관련 문제