2012-07-24 4 views
0

두 테이블, 사용자 및 방문이 있습니다. 방문 페이지의 상태 입력란에 '운영 중'인 모든 사용자를 선택하고 활성/비활성 상태에 관계없이 모든 방문 기록의 수를 계산하려고합니다.PHP MySQL의 활성 레코드 기준 합계

이 쿼리는 나에게 '활성'방문 기록

SELECT 
    users.user_id, 
    COUNT(visits.id) 
FROM users u 
JOIN visits v ON v.user_id=u.user_id 
WHERE visits.status='active' 

내가 하위 쿼리 생각, 또는 PHP는 루프하지만 사용자 테이블이 커질 경우 성능에 대한 걱정의 수를 줄 것이다. 하위 쿼리가 최상의 솔루션 인 경우 활성 레코드 코드를 게시하십시오.

답변

1

하위 쿼리는 코드에서 루핑하는 것보다 효율적입니다. 나는이 쿼리 좋을 것 :

select u.user_id, ucount 
from users u 
join (
     select user_id, COUNT(id) as ucount 
     from visits 
     group by user_id 
    ) all 
ON u.user_id = all.user_id 
join visits v 
on v.user_id=u.user_id 
where v.status='active' 

을 그리고 당신은 단지 USER_ID없이 사용자가 필요로하는 경우 * 필드에, 당신은 (arunmoezhi에서 답 영감) 사용자 테이블에 가입하지 않습니다.

select user_id,count(*) as visit_count 
from visits v 
join (
    select user_id from visits 
    where status ='active' 
) act 
on v.user_id=act.user_id 
group by v.user_id; 

서식을 지정하기 위해 편집 됨.

+0

하위 쿼리는 주변 괄호를 사용하는 활성 레코드 조인 문에서 작동합니다. 감사. – steve76

1
select user_id,count(*) as visit_count 
from visits 
where user_id in(
select user_id from visits 
where status ='active' 
) 
group by user_id;