我的MySql数据库中有两个表:
user
- sid
- userid
- username
log
- sid
- userid
- login_time
您可以猜到,日志表中的记录比用户表中的记录多得多。 我正在使用php以表格格式在我的网站上显示这些记录,如下所示。
no | userid | username | number of login |
1 | inzo | harvey | 233 |
2 | chae | schmidts | 433 |
3 | hibro | swainy | 12 |
要获得每个用户的登录次数,我可以在for语句中发送另一个查询。但它消耗资源并使服务器最终变慢。
我可以在一个连接查询中使用此结果吗?
答案 0 :(得分: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为计数。
修改强>
关于评论中的问题:如果您只想计算具有特定标记值的登录信息,则只需在where flag = x
之前添加group by
;如果您希望为该标志的每个值分别计数,则必须将该标记添加到group by
和select
。
答案 1 :(得分:1)
我认为最好,我认为最不耗费资源的方式是添加" number_of_login"到用户表并且每次他/她登录时都会增加它,因为任何其他解决方案都需要循环
答案 2 :(得分: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;
如果您想要所有结果,则需要外连接,而不是内连接。
答案 3 :(得分:0)
从用户a中选择a.sid,a.userid,a.username,COUNT(b.sid) 左连接日志b ON b.sid = a.sid group by a.sid