1

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

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

现在这强烈地让我想起了Array vs Linked List。所以我认为链表可以解决这个问题,即为每个视频记录存储类似于previous_video_id_in_playlist和的内容。next_video_id_in_playlist但是,在这种情况下,我不确定如何(按顺序)获取播放列表中的所有视频?

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

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

4

3 回答 3

1

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

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

于 2012-04-21T19:47:06.127 回答
0

你能不能不做类似的事情:

SELECT *
FROM videos
WHERE playlist_id = 1
ORDER BY next_video_id_in_playlist ASC
于 2012-04-20T20:47:30.680 回答
0

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

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

于 2012-04-20T20:59:21.080 回答