sql >> Database teknologi >  >> RDS >> Mysql

Brugeraktivitetsfeed (ala facebook). Hvordan grupperer man lignende aktiviteter?

Du vil sandsynligvis gruppere på element-id'et for det element, der ændres - som i dette tilfælde ser ud som:ua.imdbID.

Når du gør det, mister du de andre rækker af data, så du vil bruge GROUP_CONCAT til at få alle relaterede id'er.

GROUP_CONCAT(sa.aktivitets-ID);

Så dit slutresultat ville være:

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. automatisk opdatere række efter et bestemt tidspunkt

  2. Nøjagtig sideinddeling med venstre Joins

  3. Sekvens vs identitet

  4. MYSQL Konverter tidsstempel til måned