Php 按不按日期顺序返回结果分组

Php 按不按日期顺序返回结果分组,php,mysql,codeigniter,sql-order-by,greatest-n-per-group,Php,Mysql,Codeigniter,Sql Order By,Greatest N Per Group,在我的项目中,当用户观看视频时,它将被插入到一个用于存储已观看电影详细信息的表中 我使用以下查询来获取当前用户按最新记录顺序观看的电影。如果用户已多次观看视频,则应仅返回其中的最新记录 我正在使用以下查询 SELECT vm.watched_on,vm.movie_id,cp.channel_id, v.title, v.videothumbnail, v.views, v.likes, v.length, v.videoid, cp.title as videotitle, cv.thumbn

在我的项目中,当用户观看视频时,它将被插入到一个用于存储已观看电影详细信息的表中

我使用以下查询来获取当前用户按最新记录顺序观看的电影。如果用户已多次观看视频,则应仅返回其中的最新记录

我正在使用以下查询

SELECT vm.watched_on,vm.movie_id,cp.channel_id,
v.title, v.videothumbnail, v.views, v.likes, v.length, v.videoid,
cp.title as videotitle, cv.thumbnail,cv.views as cvviews,cv.likes as cvlikes, cv.id,cp.starttime,cp.endtime,vm.videotype
FROM viewedmovies as vm
LEFT JOIN video as v
ON (vm.movie_id=v.videoid AND vm.user_id=1 AND vm.videotype=1 and v.permission!=-1)
LEFT JOIN channel_videos as cv
ON (vm.movie_id=cv.id AND vm.user_id=1 AND (vm.videotype=0 or vm.videotype=2))
LEFT JOIN channel_programmes as cp
ON (vm.movie_id=cp.programme_source AND (vm.videotype=0 or vm.videotype=2) AND cp.status!=-1) 
where vm.user_id=1 GROUP BY vm.user_id, vm.movie_id, vm.videotype
ORDER BY vm.watched_on desc
LIMIT 6
视频存储在两个表中:如果viewedmovies中的videotype为1,它将从Videos表中查询;如果videotype为0,它将从channel_节目和channel_视频中查询。此查询将返回结果,但不按日期顺序返回

有人能帮我修一下吗?提前谢谢


@瑞秋…它仍然没有按日期顺序返回记录。也许我误解了。你想要的结果是按每部电影还是按整个组排序?它应该按组排序,其中包含特定视频的最新记录。好的,对不起,我误解了。我已经更新了答案。这应该是获取其余信息的基础。@Rachael..我想从两个表中查询视频,就像我在给定的查询中所做的那样。嘿,jenZ,好长时间了,我更新了一个问题后看到了你。在stackoverflow上运行了很长时间后?请向我的电子邮件idPost发送邮件或聊天请求,也可以发送您的预期输出
SELECT vm.watched_on,vm.movie_id,cp.channel_id,
v.title, v.videothumbnail, v.views, v.likes, v.length, v.videoid,
cp.title as videotitle, cv.thumbnail,cv.views as cvviews,cv.likes as cvlikes, cv.id,cp.starttime,cp.endtime,vm.videotype
FROM
(
     SELECT x.*
     FROM
     (
         SELECT user_id, movie_id, watched_on, videotype
         FROM viewedmovies
         ORDER BY watched_on DESC
     ) as x
     GROUP BY x.user_id, x.movie_id
) as vm
LEFT JOIN video as v
    ON (vm.movie_id=v.videoid AND vm.user_id=1 AND vm.videotype=1 and v.permission!=-1)
LEFT JOIN channel_videos as cv
    ON (vm.movie_id=cv.id AND vm.user_id=1 AND (vm.videotype=0 or vm.videotype=2))
LEFT JOIN channel_programmes as cp
    ON (vm.movie_id=cp.programme_source AND (vm.videotype=0 or vm.videotype=2) AND cp.status!=-1) 
WHERE vm.user_id=1 
ORDER BY vm.watched_on desc