昨天遇到一个问题,视频浏览历史记录,数据因需要客服统计视频播放量、播放时长以及各分类的喜好度所以播放信息要尽量的完整,但客户看到的历史又不能重复,且展示的是最后一次播放的时长以便继续观看。
数据展示如下:
进行正常的排序分组执行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
达到效果!
相关推荐
本篇文章是对MYSQL中每个用户取1条记录的三种写法进行了详细的分析介绍,需要的朋友参考下
MySQL对每个唯一打开的表需要2个文件描述符。默认数值是64,我把它改为512。 (8)、thread_cache_size: 可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在...
4. TaskService: 在Activiti中业务流程定义中的每一个执行节点被称为一个Task,对流程中的数据存取,状态变更等操作均需要在Task中完成。TaskService提供了对用户Task 和Form相关的操作。它提供了运行时任务查询、...
每个实例都是经过笔者精心筛选的,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。 本书两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;本书实例来源...