2013-08-12 2 views
0

나는이 매우 크고 아키텍처가 잘못 설계된 솔루션을 상속 받았으며 일부 커다란보기 흉한 쿼리를 작성/실행해야합니다.MySQL 관련 테이블 조회 및 행 -> 열

아래의 쿼리가 작동하고 내가 원하는 결과를 제공하는 동안 도움이되도록 선택한 각 자원 봉사자 목록은 테스트로 표시되지 않고 관련 사용자 계정이 '활성'으로 표시되어 있습니다. 그런 다음 추가 열 세트, 5 개 소셜 미디어 플랫폼 각각에 대해 하나 (하지만 그냥 간단하게 스킬 목록 또는 아무것도 될 수 있음)

SELECT v.volunteerid 
     , v.firstname 
     , v.lastname 
     , v.mobile 
     , v.phone 
     , v.email 
     , v.has_smartphone 
     , MAX(case vs.socialid when '1' then 'Yes' else 'No' end) Facebook 
     , MAX(case vs.socialid when '2' then 'Yes' else 'No' end) Twitter 
     , MAX(case vs.socialid when '3' then 'Yes' else 'No' end) Instagram 
     , MAX(case vs.socialid when '4' then 'Yes' else 'No' end) Vine 
     , MAX(case vs.socialid when '5' then 'Yes' else 'No' end) Google+ 
FROM wp_cfg_volunteer v 
LEFT OUTER JOIN appusers u 
    ON u.volunteerid = v.volunteerid 
LEFT OUTER JOIN wp_cfg_volunteer_social vs 
    ON vs.volunteerid = v.volunteerid 
WHERE v.is_test=0 
AND v.will_help=1 
AND u.activationstate='Active' 
GROUP BY v.volunteerid 

내 질문은 이것이다 : 나는 사회적 플랫폼 조회를 할 수있는 방법을 쿼리를 기반으로하므로 socialid 값과 관련 이름을 하드 코딩하지 않고 wp_cfg_social 테이블을 통해 반복하는 쿼리를 작성하여 ID와 이름 값을 추출 할 수 있습니까?

보너스 포인트 : mysql 쿼리의 in of &을 손에 넣을 수있는 좋은 자료는 무엇입니까?

감사합니다,
NBSP

+0

오, 잘못된 포맷팅을 사용했습니다. – nbsp

답변

0

별도의 표는, 즉 적어도 두 개의 필드, socialid 아마도 socialnamewp_cfg_social을 언급 한 바와 같이의 말을 할 수 있어야합니다. socialid1에서 5 사이의 값을 갖는지 확인하십시오.

Tutorial Point
: 당신은 아래의 링크에 갈 수 MySQL의 쿼리에 대한 두 번째 질문에 대해서는

SELECT v.volunteerid 
    , v.firstname 
    , v.lastname 
    , v.mobile 
    , v.phone 
    , v.email 
    , v.has_smartphone 
    , s.socialname 
FROM wp_cfg_volunteer v 
LEFT OUTER JOIN appusers u 
ON u.volunteerid = v.volunteerid 
LEFT OUTER JOIN wp_cfg_volunteer_social vs 
ON vs.volunteerid = v.volunteerid 
INNER JOIN wp_cfg_social s 
ON v.socialid = s.socialid 
WHERE v.is_test=0 
AND v.will_help=1 
AND u.activationstate='Active' 
GROUP BY v.volunteerid 

: 그리고 다음과 같이 하드 코드하지 않고 socialname 값을 표시 INNER JOIN를 사용할 수 주어진 Dev mySQL을 일반적인 참조로 사용하십시오
Normalization 데이터베이스 설계의 기본 사항으로 정규화를 배우는 것도 좋습니다.

+0

wp_cfg_social 테이블에는 id (자동 증가), social (플랫폼 이름) 및 order (/ admin 내의 표시에 사용되는 무시할 수있는)의 세 열이 있습니다. v.socialid는 필드가 아니며 vs는 각 사용자에 대해 여러 항목이 포함 된 테이블입니다 (즉, 1, 3 및 5의 socialid가있는 사용자 592가있을 수 있음). 잘. 오늘은 서두르지 마라. :) – nbsp