過去2日間、運転に問題があります。私は基本的に次の順序で継承を持つ4つのテーブルを持っています:
users
|
categories blogs
| | |
---- pages visits
したがって、ユーザーは多くのページと訪問を持つ多くのブログを持っています。各ページもカテゴリに属しています。
私が欲しいのは、次のカウントが関連付けられているすべてのユーザーを抽出することです。
- 各ユーザーが持っているブログの総数
- 各ユーザーの総ページ数
- 各ユーザーがブログを持っているカテゴリの総数
- 各ユーザーの合計訪問数
- 各ユーザーの合計訪問者数(訪問数ですが、個別のip_addressでカウントされます)
私の質問は次のとおりです。
SELECT
u.id
u.username,
COUNT(b.id) as blogs_count,
COUNT(p.id) as pages_count,
COUNT(v.id) as visits_count,
COUNT(distinct ip_address) as visitors_count
COUNT(c.id) as categories_count
FROM
users u
LEFT JOIN
blogs b ON(b.user_id=u.id)
LEFT JOIN
pages p ON(p.blog_id=b.id)
LEFT JOIN
visits v ON(v.blog_id=b.id)
LEFT JOIN
categories c ON(v.category_id=c.id)
GROUP BY u.id, blogs_count, pages_count, visits_count,
visitors_count, categories_count
24人のユーザーをカウントする必要がありますが、30万回近くアクセスしているという事実を考えると、SQLデータベースが永遠にハングアップし、おそらく数百万行をプルしようとしています。私はdbの第一人者ではなく、それは明らかです。誰かが私を正しい方向に向けることができますか?そうすれば、何百万ものレコードでも(もちろん適切なハードウェアを使用して)うまく実行できる優れたクエリを作成できますか?