2012-01-29 2 views
0

여러 테이블을 조인 두 테이블PHP는 MySQL은 내가 가진

사용자

userID username  email 
    1  abc [email protected] 
    2  def [email protected] 
    3  ghi [email protected] 

refID userID  invEmail 
    1  1  [email protected] 
    2  1  [email protected] 
    3  1  [email protected] 

그래서 내가, 그 사이 invited user 5 pointinviter 10 point를 제공하는 것입니다 계획이 무엇 때문에 기본적으로 userID 1 30를 얻었다 추천 그 사이에 userID 2는 얻었다. 5. 내가 PHP에서 할 수있는 점은 어려움에 직면 한 부분 중 하나는 invEmail이 식별 될 때이다. 여러 쿼리로 분리해도 상관 없습니다.

어떻게 이것을 SQL에서 표시합니까?

나는 그것은 잘못된 값을 반환

SELECT *, count(r.userID) FROM user u, referral r WHERE u.userID = r.userID OR u.email = r.invEmail GROUP BY r.userID 

같은 것을 시도했다.

내가 그것을, 초대하고 초대

내가 그것을 어떻게해야합니까 (초대 초대장에 따라 등록하고 일치하는 전자 메일이) 얼마나 많은 수가 존재를 반환하고 싶은거야?

감사합니다.

편집 : 질문에 뭔가를 추가하는 것을 잊어 버렸습니다. 초청자가 등록한 경우에만 초대장을 10 점 받길 원한다면 어떻게해야합니까? 내가 의미하는 바는 invEmail이 u.email에 존재하고 userID만이 10 점을 받았다는 것입니다. 실수해서 죄송합니다.

+0

대답을 편집하여 A) 반환 대상과 B) 반환 할 항목을 포함 할 수 있습니까? – Aaron

+0

ok 반환 할 내용을 수정했습니다. – cicakman

+0

[무엇을 시도해 봤습니까?] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

답변

2

당신이 뭔가를 할 수 있습니다

select points.userId, points.username, points.email, sum(points.points) 
FROM 
(select u.*, count(*)*10 as points 
    from user u 
    join referral on u.userID = r.userID 
    join user verify_user on r.invEmail = verify_user.email 
    group by u.userID, u.username, u.email 
UNION 
select u.*, count(*)*5 as points 
    from user u 
    join referral on u.email = r.invEmail and u.userID != r.userID 
    group by u.userID, u.username, u.email 
) as points 
group by points.userId, points.username, points.email 

난 당신이 노조 성명과 함께 등록의 각 유형에 대한 포인트를 얻을 수 두 개의 선택을 필요가 있다고 생각합니다.

+0

와우 확실히 내 리그에서 나 이 솔루션을 시도하고 곧 알려 드리겠습니다. 도와 줘서 고마워. – cicakman

+0

이것이 무엇을 의미하는지 알 수 있습니까? 'u.userID = r.refID 및 u.userID! = r.userID'에서 참조에 가입하십시오. refID는 단지 자동 증가로 증가하는 기본 키입니다. – cicakman

+1

아, refID가 사용자라고 생각했습니다. 쿼리를 업데이트하겠습니다. –