我有两张表,用户和访问量。我想选择所有在visites表的状态字段中有“active”的用户,并计算所有访问记录的计数,而不管活动/非活动状态。
这个查询只会给我一个“活动”访问记录的计数
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循环,但是如果用户表增长,我担心性能问题。如果子查询是最好的解决方案,请张贴活动记录代码。
子查询将比在代码中循环更有效。我建议这样问:
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而不需要users.*字段,那么您就不必连接到users表(受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;
为格式化而编辑。
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;