私が欲しいもの:
Group_ID=1 に接続されているすべてのユーザーについて、このユーザーが参加したアクティビティの量をカウントし、その情報を使用して、参加者が最も多い DESC(end) のユーザーで並べ替えたいと考えています。
ユーザーをグループに接続するテーブル:
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 PavlovとKirill Fuchsに感謝します。コードを組み合わせて、自分の好みのバージョンにしました。しかし、最後に「ORDER BY Attendings DESC」を忘れていたことを除けば、Kirill のコードは正確でした ;)
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