duanjizi9443 2017-04-10 07:06
浏览 32
已采纳

mysql连接两个不同的表

I have two tables in my MySql database:

user    
- sid
- userid
- username

log
- sid
- userid
- login_time

As you can guess, there's a lot more records in log tables than in user table. I am using php to present these records on my website in a table format as shown below.

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

To get the number of login for each user, I can send another queries in a for statement. But it's consuming resources and making the server slow in the end.

Can I have this result in one single join query?

  • 写回答

4条回答 默认 最新

  • dtcpvz8162 2017-04-10 07:09
    关注

    Yes you can, you have to use count the logins for each user with a 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
    

    The left join ensures you that users without logins will still be returned, wit 0 as count.

    Edit

    About the question in the comment: if you want to only count the logins with a specific flag value, you can just add where flag = x before the group by; if you want to have a separate count for each value of the flag, you have to add that flag to both group by and select.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 表达式必须是可修改的左值
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题