PHP/MySQL:如何保存媒体播放器播放列表顺序

PHP/MySQL:如何保存媒体播放器播放列表顺序,php,javascript,mysql,playlist,Php,Javascript,Mysql,Playlist,我目前正在使用Javascript、PHP和MySQL构建一个web应用程序(媒体播放器)。它将用于上传视频并将其存储到播放列表中,然后用户可以使用播放列表按所需顺序放置视频 上传的文件保存在MySQL数据库中(id、标题、文件名和位置等)。问题是,如何保存用户放置播放列表的顺序 我认为在数据库中添加“position”字段不是一个好主意,因为每次更新都会运行太多的查询。我想到了一个“next”字段,它指向列表中下一个视频的id,“仅”每个更新最多需要3个查询(对吗?) 有没有更好的方法来存储播

我目前正在使用Javascript、PHP和MySQL构建一个web应用程序(媒体播放器)。它将用于上传视频并将其存储到播放列表中,然后用户可以使用播放列表按所需顺序放置视频

上传的文件保存在MySQL数据库中(id、标题、文件名和位置等)。问题是,如何保存用户放置播放列表的顺序

我认为在数据库中添加“position”字段不是一个好主意,因为每次更新都会运行太多的查询。我想到了一个“next”字段,它指向列表中下一个视频的id,“仅”每个更新最多需要3个查询(对吗?)

有没有更好的方法来存储播放列表的顺序?它不一定要在数据库中,我想它也可以是一个文本文件

建议


谢谢

我认为“位置”字段可以。更改轨迹位置后,您可以使用一条语句对其进行更新,如下所示:

UPDATE track SET position=(CASE 
    WHEN position > :oldPos AND position <= :newPos THEN position - 1 
    WHEN position < :oldPos AND position >= :newPos THEN position + 1
    WHEN position = :oldPos THEN :newPos
    ELSE position
) WHERE playlist_id = :playlist_id
更新轨迹集位置=(大小写)
当位置>:oldPos和位置=:newPos时,则位置+1
当位置=:oldPos时,则为:newPos
其他位置
)其中playlist\u id=:playlist\u id
插入新曲目时,只需将:oldPos设置为大值(大于列表上的任何位置,例如列表长度+1)和:newPos设置为插入曲目位置;删除曲目时,将:oldPos设置为删除的曲目位置;将:newPos设置为大值。

堆栈方法(即使用下一个字段)这不是一个好主意,因为如果你需要在播放列表中间插入一个视频,那么你需要追寻下一个。


最简单的方法是只使用位置字段。当您重新排序时,您将更改与堆栈方法相同的信息量,但所需的计算量将大大减少。

我想我会为每个用户创建一个目录,并保存包含播放列表的XML文件(存储文件的路径和名称),或将其存储在DB(用户、播放列表(id、id\U用户、名称)、媒体(id、描述、路径)中,x_playlists\u media(id,id_playlist,id_media,position)。

如果有下一个字段,管理和设置position字段会有点复杂。我认为这不会对查询执行造成很大延迟。如果没有“position”字段,例如,您将如何在播放列表页面上按顺序显示视频,或者如何知道哪个视频是播放列表的第一个/最后一个视频?是的,但您还必须更改该视频之后所有视频的位置,对吗?在播放列表上移动视频时,您只需要更改旧视频和旧视频之间的曲目位置新位置。添加或删除更新仍然有效的视频时,您只需将其中一个参数设置为大于列表长度的值,这将使其更新以后曲目的所有位置。查询在
案例
条件中缺少
结束
。应使用
其他位置结束
而不是
其他位置