【发布时间】:2010-11-06 21:46:54
【问题描述】:
在我正在进行的电影数据库项目中,每个用户都有一个活动源。我想对类似的活动进行分组,例如 Facebook 的做法,但差别不大。
例如,如果用户为一部电影写了评论,一分钟后他也为该电影投票,五分钟后他上传了该电影的预告片,我想在活动源中一起显示(分组) .
我认为最好是在查询数据库时对其进行分组,但我认为在这种情况下这是不可能的,因为我使用了一个非常大的 JOIN 来获取所有数据:
SELECT ua.datetime, ua.imdbID, ua.personID, 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 = ?
ORDER BY ua.datetime DESC
我想知道如何通过修改查询或使用 PHP 来做到这一点。 谢谢。
【问题讨论】: