2015-02-24 47 views
1

我有一个相当复杂的陈述,我试图写。我不知道该怎么做,或者即使有可能。MySQL计数组数

我有一个日志记录系统,它可以扫描服务器并对给定时刻在线的每个用户进行编目。这里是我的表看起来像:

----------------- 
| ab_logs | 
----------------- 
|  id  | 
| scan_id | 
| found_user | 
----------------- 

id是一个自增的主键。除此之外没有任何实际价值。

scan_id是在每次成功扫描所有用户后递增的整数。这样我就可以将不同扫描结果分开。

found_user。在扫描期间存储哪些用户在线。

以上会产生一个表可能看起来像这样的:

id | scan_id | found_user 
---------------------------- 
1 |  1  | Nick 
2 |  2  | Nick 
3 |  2  | John 
4 |  3  | John 

所以在第一次扫描系统发现,只有尼克在线。二号找到了尼克和约翰。在3日,约翰仍然在线。

我知道我可以通过下面的查询给定的扫描过程中的在线用户数:

SELECT COUNT(*) FROM ab_logs WHERE scan_id = $scan_id 

我的问题是,我想对所有扫描上面的一个结果。这可能没有循环上述查询X次?

+4

'SELECT COUNT(*)FROM ab_logs GROUP BY scan_id' – BenM 2015-02-24 12:11:36

回答

2

可以使用GROUP BY功能如下:

SELECT COUNT(*) FROM ab_logs GROUP BY scan_id 
+0

干杯!我认为“GROUP BY”只影响数据输出的方式,而不影响实际的计算。 – Chris 2015-02-24 12:19:59

+0

@Chris,很高兴我可以帮助:) – BenM 2015-02-24 12:22:32

1

是的,你可以使用GROUP BY这样的:

SELECT COUNT(*) FROM ab_logs GROUP BY scan_id 
+1

请注册已发布的答案,而不是简单地复制它们。 – BenM 2015-02-24 12:19:24

+0

@BenM我知道这个答案,所以我回答了好吧,我会照顾那:) – 2015-02-24 12:20:39