2011-10-26 68 views
0

我目前正在使用Javascript,PHP和MySQL構建一個web應用程序(媒體播放器)。它將用於上傳視頻並將其存儲到播放列表中,然後用戶可以按照所需順序放置視頻。PHP/MySQL:如何保存媒體播放器播放列表訂單

上傳的文件保存在MySQL數據庫中(ID,標題,文件名和位置,...)。問題是,如何保存用戶放置播放列表的順序?

我不認爲在數據庫中添加一個「位置」字段是一個不錯的主意,因爲太多的查詢將在每次更新跑出。我想到了一個「下一個」字段,該字段指向列表中下一個視頻的ID,對於每次更新,「僅」最多需要3個查詢(右側?)。

有沒有更好的方法來存儲播放列表的順序?它並不是特別必須在數據庫中,它可以是一個文本文件以及我想的。

對此提出建議?

謝謝!

+0

有下一個字段,它會做有點複雜的管理和有位置字段,我不認爲它會補償在相當長的延遲查詢執行 – Dev

回答

1

我認爲'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

是的,但是您還必須在所有視頻之後更改其位置,對嗎? – Timothy

+0

在播放列表上移動視頻時,您只需更改舊位置和新位置之間視頻的位置。添加或刪除UPDATE仍然有效的視頻,只需將其中一個參數設置爲大於li的值即可st長度,這將使它更新後面曲目的所有位置。 – socha23

+0

嗯,我想這是正確的,謝謝! – Timothy

0

堆棧的方式(即使用下一個字段)是不是一個好主意,因爲如果你需要在一個播放列表的中間插入一個視頻,然後你需要通過你的下一個追逐。

最簡單的方法是隻使用一個位置字段。當你重新訂購時,你會改變相同數量的信息,但是會有更少的計算需求。

+0

我不這麼認爲,如果插入播放列表的中間的視頻,你只需要改變3「下一個」屬性: - 移動的視頻本身 的一個 - 那曾經是視頻的一在移動視頻之前 - 移動視頻之前的視頻之一 或者我在這裏丟失了什麼? – Timothy

0

我想我會爲每個用戶製作一個目錄並保存包含播放列表的XML文件(存儲文件的路徑和名稱)或將它們存儲在數據庫中(用戶,播放列表(id,id_user,name),媒體(ID,描述,路徑),x_playlists_media(ID,id_playlist,id_media,位置)。