mysql连接两个不同的表

时间:2017-04-10 07:06:44

标签: php mysql left-join

我的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语句中发送另一个查询。但它消耗资源并使服务器最终变慢。

我可以在一个连接查询中使用此结果吗?

4 个答案:

答案 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 byselect

答案 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