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