Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用户活动提要(ala facebook)。如何组织类似的活动?_Php_Mysql_Group By - Fatal编程技术网

Php 用户活动提要(ala facebook)。如何组织类似的活动?

Php 用户活动提要(ala facebook)。如何组织类似的活动?,php,mysql,group-by,Php,Mysql,Group By,在我正在处理的movies DB项目中,每个用户都有一个活动提要。我想对类似的活动进行分组,比如Facebook是如何做的,但没有什么不同 例如,如果一个用户为一部电影写了一篇评论,一分钟后他也为该电影投票,5分钟后他上传了该电影的预告片,我想在活动提要中一起显示(分组) 我认为最好是在查询数据库时对其进行分组,但我认为在这种情况下不可能这样做,因为我使用了一个非常大的联接来获取所有数据: SELECT ua.datetime, ua.imdbID, ua.personID, sa.activi

在我正在处理的movies DB项目中,每个用户都有一个活动提要。我想对类似的活动进行分组,比如Facebook是如何做的,但没有什么不同

例如,如果一个用户为一部电影写了一篇评论,一分钟后他也为该电影投票,5分钟后他上传了该电影的预告片,我想在活动提要中一起显示(分组)

我认为最好是在查询数据库时对其进行分组,但我认为在这种情况下不可能这样做,因为我使用了一个非常大的联接来获取所有数据:

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来实现。
谢谢。

您可能需要对正在修改的项目的项目id进行分组,在本例中,该id类似于:ua.imdbID

一旦这样做,您将丢失其他行的数据,因此您将使用GROUP_CONCAT获取所有相关ID

集团公司(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

这很有效,但不是我想要的方式。您建议的方法在分组时会删除所有数据。因此,我每个活动只得到一个结果,因为它合并了所有内容。您需要获取的字段数据可以使用GROUP_CONCAT()函数获取。“您需要获取的字段数据可以使用GROUP_CONCAT()函数获取”@ajacian81,您能解释一下吗,如何从GROUP_CONCAT()获取其余数据还有,何时有GROUP BY在场?