我正在制作一个简单的带有播放列表功能的视频数据库。在这样的播放列表中,视频可以按用户指定的顺序放置。
所以我认为我为每个number_in_playlist
分配了video_id
。这个问题是,如果视频19稍后被移动到视频2和3之间的位置,那么另外需要更新其中所有视频的number_in_playlist
。
现在强烈提醒我数组与链接列表。所以我认为链表可以解决这个问题,即为每个视频记录存储previous_video_id_in_playlist
和next_video_id_in_playlist
之类的内容。但是,在这种情况下,我不确定如何获取(按顺序)播放列表中的所有视频?
这一定是其他人之前遇到的问题,所以我想知道是否有标准推荐的解决方案?
PS:我使用MySQL而且我更喜欢简短快速的查询(我认为这与链接列表解决方案相反?)答案 0 :(得分:1)
如果您将playlist.number_in_playlist
列设为加倍,则可以使用整数对视频进行排序。当播放列表中的项目移动到新位置时,您将新的number_in_playlist
值设置为前一视频和后续视频之间的一半(可能是小数)。这使您可以在需要重新排序整个播放列表之前将视频移动很长时间。
重新排序的触发器是当您的新计算结果等于您的一个终点时(即与前一个或后一个视频相同的值)。出于实际目的,除非您的用户花费更多时间重新测序视频而不是观看视频,否则这种情况很少发生。
答案 1 :(得分:0)
你能不能做这样的事情:
SELECT *
FROM videos
WHERE playlist_id = 1
ORDER BY next_video_id_in_playlist ASC
答案 2 :(得分:0)
列表通常不会太长?写性能不是问题吗?在这种情况下,我只使用number_in_playlist解决方案。在每次写入时,所有数字都需要基本更新。
关系数据库中的链接列表闻起来会导致无法解决的问题。就像臭虫造成的循环一样。