我需要帮助使用一个 SQL 查询从 3 个表中选择一些信息。我会尽量解释清楚。
我有以下 3 个表:
用户
ID | FULL NAME | CATEGORY_ID
--------------------------
1 | JOHN DOE | 3
2 | JOHN DOE | 5
3 | JOHN DOE | 2
4 | JOHN DOE | 3
5 | JOHN DOE | 3
类别
ID | NAME
----------------------
2 | CATEGORY NAME 1
3 | CATEGORY NAME 2
5 | CATEGORY NAME 3
注册
ID | USER_ID
------------
1 | 1
2 | 2
3 | 4
现在我希望这个 SQL 查询的结果是一个 html 表,如下所示:
类别 | 注册人数
类别名称 2 | 3
类别名称 3 | 3
类别名称 1 | 1
总而言之,我必须从 registrations
表中选择所有 user_id
,从 中获取每个用户的
表并从 category_id
userscategories
表中找到类别 name
。
这可行吗?
最佳答案
您使用的 SQL 表形式感觉不对。
您应该有一个“USERS”表:
ID | FULL NAME
1 | JOHN DOE
2 | JOHN DOE
3 | JOHN DOE
4 | JOHN DOE
5 | JOHN DOE
'CATEGORIES' 表为
ID | NAME
2 | CATEGORY NAME 1
3 | CATEGORY NAME 2
5 | CATEGORY NAME 3
'REGISTRATIONS'表为 (我相信这张表会存储什么用户注册到什么类别)
USER_ID | CATEGORY_ID
1 | 1
2 | 2
3 | 4
然后您的查询可以通过以下方式轻松检索:
SELECT c.name, count(*) as Number_of_Registrations
FROM categories c, registrations r
WHERE c.id = r.category_id
GROUP BY c.id;
我对注册表的理解有误吗?让我知道,我会相应地提供一个新的解决方案。
关于php - MySQL COUNT 与 GROUP 和 JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31407191/