MYSQL选择另一个表中的FOREACH元素的元素数量

标签 mysql select foreach count nested

我有两个数据库,每个数据库包含一个表,users.user_groups 和 logins.logins。

第一个包含用户及其相应组的列表,如下所示:-

mysql>从users.user_groups中选择*;

+----------+-------------------+
| username | group_type |
+----------+-------------------+
| user_1 | group_1 |
| user_2 | group_1 |
| user_3 | group_1 |
| user_4 | group_2 |
| user_5 | group_2 |
| user_6 | group_2 |
| user_7 | group_3 |
| user_8 | group_3 |
| user_9 | group_3 |
+----------+---------+

因此 user_1、user_2、user_3 构成 group_1 的一部分,user_4、user_5、user_6 构成 group_2 的一部分等。

表登录,内部数据库登录包含用户登录系统的跟踪记录:-

从logins.logins中选择*;

+-----------+---------------------+
| user_name | login_date |
+-----------+---------------------+
| user_1 | 2014-06-01 09:11:09 |
| user_1 | 2014-06-02 02:11:09 |
| user_2 | 2014-06-08 02:13:43 |
| user_1 | 2014-06-02 03:13:42 |
| user_3 | 2014-06-02 03:13:42 |
| user_2 | 2014-06-02 03:13:42 |
| user_1 | 2014-06-08 03:13:42 |
| user_4 | 2014-06-02 03:13:42 |
| user_5 | 2014-06-02 03:13:42 |
| user_8 | 2014-06-02 03:13:42 |
| user_9 | 2014-06-02 03:13:42 |
+-----------+---------------------+
11 rows in set (0.00 sec)

我需要收集各组如何登录系统的统计数据,到目前为止我已经做到了:-

SELECT user_name,  group_type, COUNT(*) as number_of_logins
FROM logins.logins, users.user_groups 
WHERE username = user_name and group_type = 'group_2' 
GROUP BY user_name 
ORDER BY group_type, user_name;

这给了我

+-----------+------------+------------------+
| user_name | group_type | number_of_logins |
+-----------+------------+------------------+
| user_4 | group_2 | 1 |
| user_5 | group_2 | 1 |
+-----------+------------+------------------+
2 rows in set (0.00 sec)

但我还需要它告诉我 user_6 有 0 次登录,如下所示:-

+-----------+------------+------------------+
| user_name | group_type | number_of_logins |
+-----------+------------+------------------+
| user_4 | group_2 | 1 |
| user_5 | group_2 | 1 |
| user_6 | group_2 | 0 |
+-----------+------------+------------------+

如果有人能指出我正确的方向,我将不胜感激

我已经使用 for/next 循环通过 php 管理了一个解决方案,但我相信通过直接 sql 会更快

预先感谢,并对冗长的问题表示歉意

J

最佳答案

尝试使用LEFT JOIN而不是INNER JOIN(ugul是表别名)

SELECT ug.user_name,  
ug.group_type, 
COUNT(ul.user_name) as number_of_logins
FROM users.user_groups ug
LEFT JOIN logins.logins ul ON ug.username = ul.user_name 
and ug.group_type = 'group_2' 
GROUP BY ul.user_name 
ORDER BY ug.group_type, ug.user_name;

关于MYSQL选择另一个表中的FOREACH元素的元素数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24355138/

相关文章:

php - 在 MySQL 中链接和提取记录

mysql - GroupBy ID 但保留多个值

MySQL 查询联盟脚本表

Mysql SELECT 里面的 UPDATE

Mysql 选择唯一值

mysql - 如何合并两个里面有 "count"的表

php - Laravel 5.4 中的数据未从 Controller 存储到数据库中

php - 我只保存 txt 文件中的最后一个用户名而不是整个列表

javascript - jQuery 选择多个按钮

vbscript - For 循环中的变量保留旧值