首页 > 解决方案 > 如果完整日期小于恢复日期,如何编写单个语句来检索用户观看视频的最后恢复?

问题描述

我确信这很简单,但我做不到。我的问题:我的 sql 数据库与一张表保持用户视频观看完整状态(1)和恢复(0)。一旦用户完成,她/他再次可以观看视频,条目将恢复模式,然后状态再次插入此表中。

表名:sdbi_splms_videohit_track

       Id    videoid   status  userid  watch_date 

       1     912230      0        1      2020-08-31 15:54:14              
       2     912230      1        1      2020-09-09 15:54:14      

我们只需要检索 is status =0 且 is status =1 且 watch_date grater resume status=0 的恢复视频记录。

然后首先输出

它应该检索 0 记录,因为 watch_date 日期大于恢复状态

            ------ Watching this  again on entry increase------------      
              Id    videoid   status  userid  watch_date           
              1     912230      0          1      2020-08-031 15:54:14              
              2     912230      1          1      2020-09-09 15:54:14   
              3     912230      0          1      2020-09-10 15:54:14 

如果再次恢复,则输出最后一个

              3     912230      0              1      2020-09-10 15:54:14    

如果完成日期大于恢复日期,我的 sql 当前查询低于其始终返回的恢复记录:

             SELECT a.* FROM `sdbi_splms_videohit_track` as a WHERE a.videoid=912230 AND 
            `a`.`user_view_video` = '0' AND `a`.`user_id` = '1'  GROUP BY b.videoid ORDER BY 
             MAX(a.date_created) DESC

如果可以在单个查询中进行,请您指导我。

标签: mysql

解决方案


您提供的信息很难帮助您。也许您想考虑使用至少三个表对数据库进行一些更改,例如:

users_table
user_id int primary key autoincrement
user_name varchar(xxx)
...........
user_attribute(n)

videos_table
video_id int primary key autoincrement
video_name varchar(xxx)
...........
video_attribute(n)

video_track
id int primary_key autoincrement
video_id int
user_id int
pickup_date date
return_date date default null

这将允许您选择从用户那里拍摄但尚未返回(您的状态 0)的视频。

SELECT vt.video_id, vt.video_name 
FROM videos_track k
INNER JOIN users_table ut using (user_id) 
INNER JOIN video_table vt using (video_id)
WHERE ISNULL(k.return_date)
AND ut.user_id = 1

因此,此查询将为您提供用户使用 user:id = 1 拾取但尚未返回的所有视频。如果您需要在特定日期之后拾取的视频,请将此条件添加到 WHERE 子句:

AND k.pickup_date <= limit_date

等等。换句话说,您将能够使用各种不同的问题来查询您的数据。希望我了解您问题的本质,因此可能对您有所帮助。


推荐阅读