【问题标题】:MySQL COUNT with GROUP AND JOINMySQL COUNT 与 GROUP AND JOIN
【发布时间】:2023-03-04 15:04:01
【问题描述】:

我需要帮助才能通过一个 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,从users 表中为每个用户获取category_id,并从categories 表中找到类别name

这可行吗?

【问题讨论】:

  • 嗨 Epodax,到目前为止我还没有尝试过任何东西,我想知道是否有可能拥有一个这样的 SQL 查询。

标签: php mysql sql database join


【解决方案1】:

您使用的 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;

我对注册表有误吗?那就让我知道,我会相应地提供一个新的解决方案。

【讨论】:

  • 只有当用户可以拥有多个类别时,您的解决方案才是必要的。如果用户只能拥有一个类别,那么原始解决方案就可以正常工作。
  • 啊!我不知道那件事。酷,然后:D
【解决方案2】:

你可以试试这个

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】:

    我认为应该这样做:

    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
    

    【讨论】:

    • 您好,感谢您的快速回复。我收到以下错误:#1054 - 'field list' 中的未知列 'cat.category_name'
    • 我的错误,我把列名弄错了,现在已经修复了,不过为了将来参考,你应该尽量避免列名中有空格。
    【解决方案4】:

    $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>"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 2020-05-17
      • 1970-01-01
      相关资源
      最近更新 更多