昨天遇到一个问题,视频浏览历史记录,数据因需要客服统计视频播放量、播放时长以及各分类的喜好度所以播放信息要尽量的完整,但客户看到的历史又不能重复,且展示的是最后一次播放的时长以便继续观看。
数据展示如下:
进行正常的排序分组执行sql语句:
select vpl.user_id, vc.cat_name, v.id as videoId, v.video_name as videoName ,vpl.create_time, vpl.play_times
from zg_video_playlog vpl
left join zg_video v on vpl.video_id=v.id
left join zg_video_cat vc on vc.id=v.cat_id
group by vpl.video_id
ORDER BY vpl.id desc
结果如下:
注意:
按数据展示来看,最后一次访问的数据应为id=12的数据在第一位,且播放时间应为03-21日,明显这不是我想要的数据
根据上面的分析,group by到select时只取到分组里的第一条信息。解决方案如下:
第一步:max()
根据结果来看,我们已经拿到了最新观看的顺序,但还是有问题观看的时间还不是3-20,如果我们只要保证顺序用这个方法是完全没问题的。
第二步:
先排序,然后group,这样的话自然可以取到最适合的一条数据可以试试
select vpl.id as vplId, v.id as videoId, v.thumb, v.video_name, v.video_url, vpl.user_id, vpl.create_time , vpl.play_times as playTimes , v.look_front, v.summary
from (select * from zg_video_playlog vpl where vpl.user_id=521 order by vpl.id desc) `vpl`
left join zg_video v on vpl.video_id=v.id
left join zg_video_cat vc on vc.id=v.cat_id
group by vpl.video_id
order by vpl.id desc
达到效果!