3

私が欲しいもの:

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 PavlovKirill 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
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 に答える