Php 使用组和连接进行MySQL计数

Php 使用组和连接进行MySQL计数,php,mysql,sql,database,join,Php,Mysql,Sql,Database,Join,我需要帮助,用一个SQL查询从3个表中选择一些信息。我会尽可能多地解释 我有以下三个表格: 使用者 类别 注册 现在,我希望此SQL查询的结果是一个html表,如下所示: 类别|注册数量 类别名称2 | 3 类别名称3 | 3 类别名称1 | 1 总之,我必须从registrations表中选择所有用户id,从users表中获取每个用户的category id,并从categories表中找到category名称 这可行吗?我认为应该这样做: select cat.`category name`

我需要帮助,用一个SQL查询从3个表中选择一些信息。我会尽可能多地解释

我有以下三个表格:

使用者 类别 注册 现在,我希望此SQL查询的结果是一个html表,如下所示:

类别|注册数量 类别名称2 | 3 类别名称3 | 3 类别名称1 | 1

总之,我必须从registrations表中选择所有用户id,从users表中获取每个用户的category id,并从categories表中找到category名称


这可行吗?

我认为应该这样做:

select cat.`category name`, count(reg.user_id) from registrations reg
inner join users on reg.user_id = users.ID
inner join categories cat on cat.ID = users.category_id
group by cat.category_id
你可以试试这个

SELECT c.name, count(r.user_id) 
FROM categories c 
inner join users u 
    on  u.category_id = c.id 
inner join registrations r 
    on r.user_id = u.id 
group by c.id

您使用的SQL表表单感觉不正确

您应该有一个“用户”表,如下所示:

ID | FULL NAME

1 | JOHN DOE
2 | JOHN DOE
3 | JOHN DOE
4 | JOHN DOE
5 | JOHN DOE
“类别”表为

ID | NAME

2 | CATEGORY NAME 1
3 | CATEGORY NAME 2
5 | CATEGORY NAME 3
“注册”表为 我相信这个表将存储哪些用户已注册到哪个类别

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;
登记表我错了吗?让我知道,我将相应地提供一个新的解决方案。

$sql1=从类别中选择*; $query1=mysqli\u query$con$sql1; 回响 而$row1=mysqli\u fetch\u assoc$query1{ echo.$row1['NAME']。; $sql12=选择COUNTCATEGORY_ID作为CATEGORY_ID='用户中的NumberOfUsers。$row1['CATEGORY_ID']; $query2=mysqli\u query$con$sql12; $row2=mysqli\u fetch\u assoc$query2; echo.$row2['NumberOfUsers']; }
echoHi Epodax,到目前为止我还没有尝试过任何东西,我想知道是否有可能有一个这样的SQL查询。嗨,谢谢你的快速回复。我得到以下错误:1054-未知列“字段列表”中的“cat.category_name”我的错误,我错误地命名了列的名称,现在已修复,但为了将来参考,您应该尽量避免使用带有空格的列名。只有当用户可以有多个类别时,才需要您的解决方案。如果一个用户只能有一个类别,那么原来的解决方案就可以了。啊!我不知道那件事。酷,那么:D
ID | NAME

2 | CATEGORY NAME 1
3 | CATEGORY NAME 2
5 | CATEGORY NAME 3
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;