带有GROUP AND JOIN的MySQL COUNT

时间:2015-07-14 12:54:01

标签: 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

总而言之,我必须从user_id表中选择所有registrations,从category_id表中获取每个用户的users并找到类别{{ 1}}来自name表。

这可行吗?

4 个答案:

答案 0 :(得分:1)

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

' 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;

注册表我错了吗? Lemme知道,我会相应地提供一个新的解决方案。

答案 1 :(得分:0)

我认为应该这样做:

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

答案 2 :(得分:0)

你可以试试这个

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

答案 3 :(得分:0)

$sql1="SELECT * FROM CATEGORIES";
$query1=mysqli_query($con,$sql1);
echo "<table>";
while($row1=mysqli_fetch_assoc($query1)){
echo"<tr><td>". $row1['NAME']."</td >";
$sql12="SELECT COUNT(CATEGORY_ID) AS NumberOfUsers FROM USERS WHERE CATEGORY_ID='".$row1['CATEGORY_ID']."'";
        $query2=mysqli_query($con,$sql12);
        $row2=mysqli_fetch_assoc($query2);
		echo"<td>".$row2['NumberOfUsers']."</td></tr>" ;
}
echo"</table>"