2017-04-10 31 views
0

2つの異なるテーブルを結合します。 私はこれらのレコードを私のウェブサイト上で以下のような表形式で提示するためにphpを使用しています。mysqlのは、私は私のmysqlデータベースの2つのテーブルを持っている

no | userid | username | number of login | 
1 | inzo | harvey |  233  | 
2 | chae | schmidts |  433  | 
3 | hibro | swainy |  12   | 

ユーザごとにログインの数を取得するために、私はのための声明の中で別のクエリを送信することができます。しかし、それはリソースを消費し、最終的にサーバーを遅くしてしまいます。

この結果を1回のジョインクエリで使用できますか?

+1

あなたが試した内容が含まれます。あなたは解決策を得ます –

答えて

2

はいあなたは、あなたが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を返却されることを保証します。

編集

コメントでの質問について:あなたが唯一の特定のフラグ値でログインをカウントしたい場合は、あなただけのgroup bywhere flag = xを追加することができます。フラグの値ごとに別々のカウントを行う場合は、そのフラグをgroup byselectの両方に追加する必要があります。

+0

ありがとうMr. Zanini、別の列の 'フラグ'(たとえば、0または1)がログテーブルにある場合、ログインの数を取得するために参照フラグ列が必要です。私はカウント(t2.sid)を得るのにWHERE句が必要なのですか? – user1942626

+0

編集した私の答え –

0
SELECT TABLE_A.row_id, TABLE_A.category, TABLE_A.val_1, TABLE_B.val_2 
FROM TABLE_B 
LEFT OUTER JOIN TABLE_A ON TABLE_B.row_id = TABLE_A.row_id 
ORDER BY row_id; 

すべての結果が必要な場合は、内側結合ではなく外部結合が必要です。

1

私は最善を推測し、それによって、私は少なくともリソース他のソリューションは、ループが必要になりますので、ユーザテーブルに「number_of_login」を追加し、ちょうどそれを彼/彼女がログインしているすべての時間を増やすことであろう道を消費することを意味

0

a.sid、a.userid、a.username、aを選択します。ユーザーaからCOUNT(b.sid)を選択します。 左の結合ログb ON b.sid = a.sidによるa.sid

関連する問題