【发布时间】: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 Pavlov 和Kirill 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