3

我想要的是:

对于连接到 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 循环来迷惑自己?

我已经检查了加入表格的方法,并且我对ORDER BY稍微熟悉,但我不知道如何存储每个用户的出席信息,然后按它排序,然后将它们放在一起根据需要查询;/请帮忙?


解决了!

感谢GordonM提供有关查看位置的指导,感谢 Milen PavlovKirill Fuchs提供代码示例。我将这些代码组合成我自己喜欢的版本。然而,基里尔的代码是准确的,但他最后忘记了“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
4

1 回答 1

3

您将不得不使用连接。下面的例子:

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
于 2013-10-20T21:54:45.517 回答