PHP / MySQL: как сохранить порядок воспроизведения медиаплеера - PullRequest
0 голосов
/ 26 октября 2011

В настоящее время я создаю веб-приложение (медиаплеер) с использованием Javascript, PHP и MySQL. Он будет использоваться для загрузки видео и сохранения их в списке воспроизведения, который затем может использоваться пользователем для размещения видео в нужном порядке.

Загруженные файлы сохраняются в базе данных MySQL (идентификатор, заголовок, имя и местоположение файла, ...). Вопрос в том, как сохранить порядок, в котором пользователь помещает плейлист?

Не думаю, что добавление поля «позиция» в базе данных является хорошей идеей, так как при каждом обновлении будет выполняться слишком много запросов. Я подумал о поле «следующее», которое указывает на идентификатор следующего видео в списке, для которого «только» потребуется максимум 3 запроса для каждого обновления (верно?).

Есть ли лучший способ сохранить порядок в списке воспроизведения? Это не обязательно должно быть в базе данных, это может быть и текстовый файл, я полагаю.

Предложения

Спасибо!

Ответы [ 3 ]

1 голос
/ 26 октября 2011

Я думаю, что поле 'position' будет в порядке. Вы можете обновить его одним оператором после изменения позиции трека, например:

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 на большое значение (больше, чем любая позиция в списке, например, длина списка + 1) и: newPos для вставленной позиции дорожки, при удалении набора дорожек: oldPos для удаления отслеживать положение и: newPos в большое значение.

0 голосов
/ 26 октября 2011

Я думаю, что я бы сделал каталог для каждого пользователя и сохранил бы XML-файлы (сохраняющие путь и имя файла), содержащие списки воспроизведения, или сохранял бы их в БД (пользователи, списки воспроизведения (id, id_user, name), медиа (id, описание, путь), x_playlists_media (id, id_playlist, id_media, position).

0 голосов
/ 26 октября 2011

Подход с использованием стека (т. Е. С использованием следующего поля) не очень хорошая идея, потому что, если вам нужно вставить видео в середину списка воспроизведения, вам нужно проследить свой следующий.

Самый простой способ - просто использовать поле позиции. при повторном заказе вы измените тот же объем информации, что и при использовании стека, но при этом потребуется гораздо меньше вычислений.

...