2012-07-24 63 views
0

我有兩個表,用戶和訪問。我想要選擇訪問表狀態字段中具有「活動」的所有用戶,並記錄所有訪問記錄的計數,而不考慮活動/非活動狀態。PHP MySQL Active Record條件總和

這個查詢只會給我的「活動」的訪問記錄

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 2012-07-24 21:35:48

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;