【问题标题】:Group by not returning results in date order通过不按日期顺序返回结果进行分组
【发布时间】:2014-08-08 04:52:20
【问题描述】:

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

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

我正在使用以下查询。

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,它将从视频表中查询,如果 videotype 为 0 ,它将从 channel_programmeschannel_videos 中查询。此查询正在返回结果,但不是按日期顺序。

http://sqlfiddle.com/#!2/0c382/1

谁能帮我解决这个问题?提前致谢。

【问题讨论】:

  • hey jenZ 好久不见
  • 我在更新问题后见到了你。在 stackoverflow 上呆了很长时间?
  • 向我的电子邮件 ID 发送邮件或聊天请求
  • 也发布您的预期输出

标签: php mysql codeigniter sql-order-by greatest-n-per-group


【解决方案1】:

http://sqlfiddle.com/#!2/0c382/55

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

【讨论】:

  • @Rachael..它仍然没有按日期顺序返回记录。
  • 也许我理解错了。您想要按电影还是按整个组排序的结果?
  • 它应该按包含特定视频的最新记录的组排序。
  • 好吧抱歉我误会了。我已经更新了答案。这应该作为获取其余信息的基础。
  • @Rachael..我想从两个表中查询视频,就像我在给定查询中所做的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多