0

ユーザーと訪問の2つのテーブルがあります。訪問テーブルのステータスフィールドに「アクティブ」があるすべてのユーザーを選択し、アクティブ/非アクティブのステータスに関係なく、すべての訪問レコードをカウントしたいと思います。

このクエリでは、「アクティブな」訪問レコードの数のみが表示されます

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ループを考えていましたが、usersテーブルが大きくなるとパフォーマンスが心配になりました。サブクエリが最善の解決策である場合は、アクティブなレコードコードを投稿してください。

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 に答える