MySql データベースに 2 つのテーブルがあります。
user
- sid
- userid
- username
log
- sid
- userid
- login_time
お察しのとおり、ユーザー テーブルよりもログ テーブルの方がはるかに多くのレコードがあります。私は php を使用して、これらのレコードを以下に示すように表形式で Web サイトに表示しています。
no | userid | username | number of login |
1 | inzo | harvey | 233 |
2 | chae | schmidts | 433 |
3 | hibro | swainy | 12 |
各ユーザーのログイン数を取得するために、for ステートメントで別のクエリを送信できます。しかし、それはリソースを消費し、最終的にサーバーを遅くします。
この結果を 1 つの結合クエリで取得できますか?
はい、できます。各ユーザーのログインをカウントする必要があります。 group by
select t1.userid, t1.username, count(t2.sid)
from user t1
left join
log t2
on t1.userid = t2.userid
group by t1.userid, t1.username
これleft join
により、ログインしていないユーザーが引き続き返されますが、カウントは 0 です。
編集
コメント内の質問について: 特定のフラグ値を持つログインのみをカウントしたい場合は、単に; のwhere flag = x
前に追加できgroup by
ます。フラグの値ごとに個別のカウントが必要な場合は、そのフラグを と の両方に追加する必要がgroup by
ありselect
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加