sql >> データベース >  >> RDS >> Mysql

ユーザーアクティビティフィード(Facebook)。同様の活動をグループ化する方法は?

    変更するアイテムのアイテムIDをグループ化する可能性があります。この場合は、ua.imdbIDのようになります。

    これを行うと、他のデータ行が失われるため、GROUP_CONCATを使用して関連するすべてのIDを取得します。

    GROUP_CONCAT(sa.activityID);

    したがって、最終結果は次のようになります。

    SELECT ua.datetime, ua.imdbID, ua.personID, GROUP_CONCAT(sa.activityID), sa.activity, m.title, m.year, p.name, umv.vote, upv.vote, r.review, t.youTubeID, ps.filename, ph.filename
    FROM user_activity ua
    JOIN sys_activities sa ON ua.activityID = sa.activityID
    LEFT OUTER JOIN movies m ON ua.imdbID = m.imdbID
    LEFT OUTER JOIN persons p ON ua.personID = p.personID
    LEFT OUTER JOIN user_movies_vote umv ON umv.userID = ua.userID AND umv.imdbID = ua.imdbID
    LEFT OUTER JOIN user_persons_vote upv ON upv.userID = ua.userID AND upv.personID = ua.personID
    LEFT OUTER JOIN reviews r ON r.userID = ua.userID AND r.imdbID = ua.imdbID
    LEFT OUTER JOIN (
            select imdbID, userID, youTubeID, max(hd) as MaxTrailerStatus
            from trailers
            group by imdbID
            ) t ON ua.imdbID = t.imdbID AND ua.userID = t.userID
    LEFT OUTER JOIN (
            select imdbID, filename, max(main) as MaxPosterStatus
            from posters
            group by imdbID
            ) ps ON ua.imdbID = ps.imdbID
    LEFT OUTER JOIN (
            select personID, filename, max(main) as MaxPhotosStatus
            from photos
            group by personID
            ) ph ON ua.personID = ph.personID
    WHERE ua.userID = ?  GROUP BY ua.imdbID
    
    
    ORDER BY ua.datetime DESC
    



    1. MySQLコマンドラインとトランザクション

    2. Bashで変数を宣言しますか?

    3. MySQL DROP UNIQUE CONSTRAINT

    4. mysqlコンテナにデータをコミットする