Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL活动记录条件和_Php_Mysql_Activerecord - Fatal编程技术网

PHP MySQL活动记录条件和

PHP MySQL活动记录条件和,php,mysql,activerecord,Php,Mysql,Activerecord,我有两个表,用户和访问。我想选择在“访问”表的“状态”字段中具有“活动”的所有用户,包括所有访问记录的计数,而不考虑活动/非活动状态 此查询仅提供“活动”访问记录的计数 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 
     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 
where user_id in(
select user_id from visits
where status ='active'
)
group by 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;