我需要帮助从一个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
表。
这可行吗?
答案 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>"