【问题标题】:Storing the order of videos that are in a playlist存储播放列表中视频的顺序
【发布时间】:2012-04-20 20:27:36
【问题描述】:

我正在开发一个简单的具有播放列表功能的视频数据库。在这样的播放列表中,可以按用户指定的顺序放置视频。

所以我想我为每个video_id 分配一个number_in_playlist。这样做的问题是,如果稍后将视频 19 移动到视频 2 和 3 之间的位置,则另外需要更新其间所有视频的 number_in_playlist

这让我想起了数组与链表。所以我认为链接列表可以解决这个问题,即为每个视频记录存储previous_video_id_in_playlistnext_video_id_in_playlist 之类的东西。但是,在这种情况下,我不确定如何(按顺序)获取播放列表中的所有视频?

这一定是别人之前遇到过的问题,所以想问问有没有标准推荐的解决方案?

PS:我使用的是 MySQL,我更喜欢简短、快速的查询(我认为这与链表解决方案背道而驰?)

【问题讨论】:

  • 你可能已经有了这个,但是由于“视频”与“播放列表”是多对多的关系,你已经创建了一个交集表,对吧?首先创建它,它可能会提供一些解决方法的想法。
  • 我有一个表映射video_idplaylist_id,如果这就是你的意思吗?我自己的解决方案是在该映射表中添加另一个字段number_in_playlist。我只是希望可能有更好的解决方案(用于更新)。

标签: mysql database-design video playlist


【解决方案1】:

如果您将 playlist.number_in_playlist 列设为 double,则可以先使用整数对视频进行排序。当播放列表中的项目移动到新位置时,您将新的number_in_playlist 值设置为(可能是小数)数字,该数字位于前后视频的中间。这使您可以在很长一段时间内移动视频,而不必担心重新排序整个播放列表。

重新排序的触发器是当您的新计算值等于您的一个终点(即与前面或后面的视频相同的值)时。出于实际目的,这种情况很少会发生,除非您的用户花更多时间重新排序视频而不是观看视频。

【讨论】:

    【解决方案2】:

    你能不能不这样做:

    SELECT *
    FROM videos
    WHERE playlist_id = 1
    ORDER BY next_video_id_in_playlist ASC
    

    【讨论】:

      【解决方案3】:

      列表通常不会太长吗?写入性能不是问题吗?在这种情况下,我只使用 number_in_playlist 解决方案。每次写入时,所有数字基本上都需要更新。

      关系数据库中的链接列表闻起来会导致无法预料的问题。就像由错误引起的循环一样。

      【讨论】:

      • 这不是一个真正的问题,我只是在想可能有更好的解决方案。显然不是。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多