0

我有两个表,用户和访问。我想选择在访问表的状态字段中具有“活动”的所有用户,以及所有访问记录的计数,无论活动/非活动状态如何。

这个查询只会给我一个“活动”访问记录的计数

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 循环,但担心用户表增长时的性能。如果子查询是最好的解决方案,请发布活动记录代码。

4

2 回答 2

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 而不需要 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;

编辑格式化。

于 2012-07-24T02:17:28.120 回答
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;
于 2012-07-24T02:22:48.590 回答