2012-02-05 6 views
0

온라인 사용자와 사용자 친구를 검색하는 쿼리가 있습니다. 이제 나는이 두 가지를 결합하는 최선의 방법을 알고 온라인상에서 사용자 친구들의 결과를 얻을 수 있기를 바랍니다.MYSQL은 두 가지 쿼리를 결합하여 기능을 얻습니다.

친구 쿼리 : 온라인

SELECT 
     CASE WHEN userID=$session 
     THEN userID2 
     ELSE userID 
     END AS friendID 
FROM friends 
WHERE userID=$id OR userID2=$session 
LIMIT 18 

사용자 :

SELECT * 
FROM usersActivity 
WHERE setActivity!=3 
AND userID!=$session 

usersActivity.userID 내가 생각 friendID

+0

'friends'및 'useractivity'테이블이 연결되는 방법을 지정할 때까지는 불가능합니다. –

+0

usersActivity.userID는 friendID와 일치해야합니다. –

+0

목록 또는 개수로? 유스 케이스를 알려줘. – iLLin

답변

1

쿼리해야합니다 : 당신은 단지 사용자의 계산하려면 가

SELECT users.name 
FROM usersActivity 
INNER JOIN friends ON 
    (usersActivity.userID = usersActivity.userID AND usersActivity.userID2 = $session) OR 
    (usersActivity.userID2 = usersActivity.userID AND usersActivity.userID = $session) 
INNER JOIN users ON 
    (usersActivity.userID = users.userID) OR 
    (usersActivity.userID2 = users.userID) 
WHERE usersActivity.setActivity!=3 
    AND usersActivity.userID!=$session 
    AND users.userID != $session 
GROUP BY users.id 

당신은 COUNT(user.id)를 사용할 수 있습니다. 또는 모든 이름을 선택하고 (나중에 목록으로 사용하기 위해 저장) 나중에 실제 친구 수를 얻으려면 mysql_num_rows() 만 사용하십시오.

0

이 이해가 일치해야 무엇을 당신의 후 :

SELECT userID FROM usersActivity 
    WHERE setActivity !=3 
    AND userID IN(
    (SELECT userID FROM friends WHERE userID2=$id) 
); 

친구 연결 테이블에 대해 이중 행이 있고 $id이 현재 로그인 한 사용자라고 가정합니다.

userID userID2 
1  2 
2  1 

where 문에서 하위 쿼리를 사용하면이를 통합해야합니다. 이것이 더 빠르거나 빠를 지 확신하지 못하는 경우, 어떻게 작업하는지에 따라 프로파일 링하십시오. 사용자 테이블에 가입하여 친구 이름 정보와 필요한 기타 정보를 얻을 수 있습니다.

+0

내 설정에는 우정을위한 행이 하나만 있고 두 개가 아닙니다. 내 사례 절을 통해 friendID를 얻을 수 있습니다. –

+0

그렇다면 하위 쿼리를 수정할 수 있습니다.이 예제는 필요한 곳에서 얻을 수있는 예입니다. 하위 쿼리 내부의 CASE를 추가하십시오. – iLLin

+0

또한 성능상의 이유로 행을 두 배로 늘릴 수도 있습니다. – iLLin

관련 문제