php - MySQL COUNT 与 GROUP 和 JOIN

标签 php mysql sql database join

我需要帮助使用一个 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 users 表并从 categories 表中找到类别 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/

相关文章:

.NET 中的 SQL Server T-SQL 解析器用于检查语法和对象存在

sql - 按用户获取未读消息

c# - 在 C# SQL 查询中,Parameters.Add() 比直接在查询中嵌入值有什么优势?

php - Docker Compose : Unable to run mysql, 会自动停止

php - 将 HTML 转换为 doc 和 docx 格式时的分页符 - PHP

php - 样式化来自 php 表单的电子邮件

php OOP 错误 : Call to a member function query() on null in c:blah/bla/. ./\engine\admin\cms.class.php 第 7 行

php - php中的mysql错误

jquery - 使用 Flask Mysqldb 通过 AJAX 将行插入数据库

php - Mysql存储过程的查询优化