我有两个表,用户和访问。我想选择在访问表的状态字段中具有“活动”状态的所有用户,并计算所有访问记录的数量,而不考虑活动/非活动状态。

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

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;


编辑格式。

关于php - PHP MySQL Active Record条件总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11623133/

10-13 04:48