2016-09-28 2 views
0

우선 다음과 같은 SQL 문이 :결합 여러 복합 MySQL의 문

SELECT * FROM members 
    WHERE username IN (
     SELECT friend2 as username FROM list_friends 
      WHERE (friend1 = 'user' AND friend2 <> 'user') 
      UNION 
     SELECT friend1 as username FROM list_friends 
      WHERE (friend2 = 'user' AND friend1 <> 'user')          
    ) 

위의 코드는 완벽하게 작동합니다. 지정된 사용자 친구 목록과 일치하는 '구성원'테이블의 모든 행을 반환합니다.이 행은 주어진 사용자에 대해 list_friends 테이블을 검색하고 friend1 또는 friend2 열에서 친구 이름을 가져 와서 만듭니다.

내가 말했듯이, 그것은 완벽하게 작동합니다.

SELECT username, 
(SELECT COUNT(*) FROM sites WHERE username = 'user') 
+ (SELECT COUNT(*) FROM banners WHERE username = 'user') 
+ (SELECT COUNT(*) FROM stream_updates WHERE username = 'user') 
    AS cnt from members WHERE username = 'user' 

이 열 탄소 나노 튜브로 지정된 행과 출력의 모든 COUNT의 총합을 계산을 결합합니다

다음으로 나는 다음과 같은 SQL 문을있다.

저는 친구, cnt를 반환하는 결과를 얻을 수 있도록이 두 문장을 결합하고 싶습니다.

username | cnt 
---------------------- 
    a friend  | 6525 
    diff friend | 983 
    yet again | 3485 

내가 쉽게 첫 번째, 두 PHP는 루프에서이 작업을 실행하는 첫 번째 쿼리에서 친구의 이름을 가져, 다음 foreach 문을 사용할 수 있으며, 두 번째 쿼리를 실행

예 출력은 매우 간단 할 것 첫 번째 쿼리의 루프에서 나는 위의 출력을 얻으려면 구문을 하나로 결합하는 더 좋은 방법이나 방법이 있는지 궁금합니다.

+0

첫 번째 쿼리 또는 모든 행의 개수를 계산 하시겠습니까? –

+0

첫 번째 쿼리는 "친구"를 반환합니다. 그런 다음 두 번째 쿼리에서 친구 "cnt"를 통해 각 친구를 실행시켜야합니다. – Bruce

+0

우리가 주어진 사용자에 대해 "친구 목록"을 얻는 것을 명확히하기 위해, 친구 목록의 각 사용자는 그들이 수행 한 총 "활동"을 세고 있습니다. – Bruce

답변

1

나는 그냥 상관 하위 쿼리를 원한다고 생각 :

SELECT username, 
     ((SELECT COUNT(*) FROM sites s WHERE s.username = f.username) + 
     (SELECT COUNT(*) FROM banners b WHERE b.username = f.username) + 
     (SELECT COUNT(*) FROM stream_updates su WHERE su.username = f.username) 
     ) as cnt 
FROM (SELECT friend2 as username 
     FROM list_friends 
     WHERE friend1 = 'user' AND friend2 <> 'user' 
     UNION 
     SELECT friend1 as username 
     FROM list_friends 
     WHERE friend2 = 'user' AND friend1 <> 'user'          
    ) f; 

참고 : 당신은 여기에 members 테이블이 필요하지 않습니다. 다른 테이블에는 username이 있습니다.

+0

세 번째 줄의 끝에 +가 누락되었지만 이것이 정확히 내가 원하는 것입니다! 고맙습니다. – Bruce

+0

@ Bruce. . . 나는 이것이 도움이 된 것을 기쁘게 생각합니다. 그것은 복잡한 쿼리입니다. 건배. –