首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL统计登录次数并返回最新登录次数

问MySQL统计登录次数并返回最新登录次数
EN

Stack Overflow用户
提问于 2012-03-24 08:55:31
回答 3查看 1.4K关注 0票数 1

我有一个非常简单的表格:

代码语言:javascript
复制
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| time     | int(11)      | YES  |     | 0       |       |
| username | varchar(120) | NO   | MUL |         |       |
| ip       | varchar(40)  | NO   | MUL |         |       |
| failed   | varchar(40)  | NO   | MUL |         |       |
+----------+--------------+------+-----+---------+-------+

我希望查询一些特定的用户,我想要登录的计数和最近的登录(如果有任何登录存在)。我尝试了"GROUP BY“的各种组合,但都不是很有效。

我的简单计数查询是这样的:

代码语言:javascript
复制
mysql> SELECT count(*), username FROM logins WHERE username='foo@bar.com' and failed='0' group by username;

我如何才能得到同时包含计数和上次登录的单行呢?

如果它将时间戳转换为人类友好的格式,则会获得加分。

编辑:第一个答案对我来说似乎是最清楚的,而且效果很好。

我还想出了这个,它似乎在大约相同的时间内工作和返回,但我不确定我在做什么嵌套的SELECT:

代码语言:javascript
复制
SELECT COUNT(*), username (SELECT MAX(time)) FROM logins WHERE username='foo@bar.com' AND failed='0' GROUP BY username;

为了获得人类可读的时间:

代码语言:javascript
复制
SELECT COUNT(*), username (SELECT FROM_UNIXTIME(MAX(time))) FROM logins WHERE username='foo@bar.com' AND failed='0' GROUP BY username;

这个版本和第一个答案中看起来更合适的查询都需要大约2m27s(表大约有1.61亿行)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-24 09:00:41

Max(time)将为您提供最新的登录时间。查看下面的完整查询

代码语言:javascript
复制
SELECT username, 
       COUNT(*)    AS `count`, 
       Max(`time`) AS `latest` 
FROM   logins 
WHERE  username = 'foo@bar.com' 
       AND failed = '0' 
GROUP  BY username; 
票数 2
EN

Stack Overflow用户

发布于 2012-03-24 08:59:08

请在下面进行尝试:

代码语言:javascript
复制
SELECT count(*), username,time 
FROM logins 
WHERE username='foo@bar.com' and failed='0' 
group by username 
order by time desc

或

代码语言:javascript
复制
SELECT count(*), username,max(time) 
FROM logins 
WHERE username='foo@bar.com' and failed='0' 
group by username 
票数 0
EN

Stack Overflow用户

发布于 2012-03-24 09:24:22

代码语言:javascript
复制
select username, count(username) count, max(time) time 
from logins where username in ("a","b") group by username
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9848200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档