【问题标题】:SQL: How to Count occurrences in TableA, join with TableB and then order by occurences?SQL:如何计算 TableA 中的出现次数,与 TableB 连接,然后按出现次数排序?
【发布时间】:2013-10-20 21:29:35
【问题描述】:

我想要什么:

对于连接到 Group_ID=1 的每个用户,我想计算该用户参加的活动的数量,并使用该信息按参加次数最多的用户订购 DESC(结束)。

将用户连接到组的表:

user_r_group:

ID    User_ID    Group_ID

1     1          1
2     3          1
3     2          1
4     1          2  <-- User 1 connected to another group

显示用户参加过哪些活动的表格:

activities_attended:

ID    Activity_ID    User_ID

1     1              1  <-- User 1 have attended 3 activities
2     1              3
3     1              2
4     2              1  <-- User 1 have attended 3 activities
5     2              3
6     3              1  <-- User 1 have attended 3 activities

我正在寻找的结果:

User_ID    Attendings

1          3
3          2
2          1

有没有办法写一个mysql_query来实现这个?

感觉确实如此。还是我需要用 php 中的循环和 querycombinations 来迷惑自己?

我已经查看了join tables 的方法,我对ORDER BY 有点熟悉,但我不知道如何存储每个用户的出席信息,然后按它订购,然后放根据需要将它们全部放在一个查询中;/ 请帮忙?


解决了!

感谢GordonM 提供有关查看位置的指导,感谢Milen PavlovKirill Fuchs 提供代码示例。我将这些代码组合成我自己喜欢的版本。然而,Kirill 的代码是准确的,但他最后忘记了“ORDER BY Attendings DESC”;)

SELECT
    COUNT(aa.User_ID) as Attendings,
    urg.User_ID
FROM
    activities_attended aa
    INNER JOIN user_r_group urg ON urg.User_ID=aa.User_ID
WHERE
    urg.Group_ID=1
GROUP BY
    urg.User_ID
ORDER BY
    Attendings DESC

【问题讨论】:

  • 是的,有。它涉及一个连接和一个聚合函数,希望这些信息足以让您找到所需的内容
  • 不要使用mysql_* 函数,因为它们容易出错且已被弃用。使用mysqli_* 甚至更好:PDO
  • @GordonM,找到了!谢谢。在这里结合一些答案以获得我想要的东西(Kirills 在代码方面的准确度约为 95%),将发布我自己的答案以及准确的工作结果以及对相关部分的识别。 (只需等待 10 次以上的代表或 8 小时的新用户限制 -.-)
  • @nietonfir,你是对的,我目前正在转换为 PDO。不过,由于我刚开始编写代码,所以我想了解一下标准问题,以了解不同之处:)
  • @TimLind 很高兴你取得了一些成功。如果你能自己解决问题总是更好,因为他们更有可能在未来和你在一起。

标签: php mysql join count sql-order-by


【解决方案1】:

您必须使用连接。示例如下:

SELECT `user_r_group`.`User_ID`, count(`activities_attended`.`ID`) AS Attendings
            FROM `user_r_group`
            INNER JOIN `activities_attended`
                    ON `user_r_group`.`User_ID` = `activities_attended`.`User_ID`
            WHERE `user_r_group`.`Group_ID` = 1
                    GROUP BY `user_r_group`.`User_ID`
                    ORDER BY Attendings DESC

【讨论】:

    猜你喜欢
    • 2021-10-28
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2018-01-29
    相关资源
    最近更新 更多