2011-10-26 15 views
0

現在、Javascript、PHP、MySQLを使用してWebアプリケーション(メディアプレーヤー)を構築しています。これは、ビデオをアップロードしてプレイリストに格納し、ユーザがビデオを所望の順序で配置するために使用することができる。PHP/MySQL:メディアプレーヤーのプレイリストの注文を保存するには

アップロードされたファイルは、MySQLデータベースに保存されています(ID、タイトル、ファイル名、場所など)。質問は、ユーザーがプレイリストを置く順序をどのように保存するのですか?

データベース内に「位置」フィールドを追加することはお勧めできません。それぞれの更新であまりにも多くのクエリが実行されるためです。私はリスト内の次のビデオのIDを指している "次の"フィールドを考えましたが、これは "各"更新のために最大3つのクエリを必要とするだけです(右?)。

プレイリストの順序を保存する方が良いでしょうか?特にデータベースにある必要はありませんが、それは私が想定しているテキストファイルでもあります。

提案?

ありがとうございます!

+0

次のフィールドを持つと、管理する位置が複雑になり、位置フィールドが複雑になります。クエリの実行 – Dev

答えて

1

「位置」フィールドはOKと思われます。あなたはこのように、トラックの位置を変更した後、1文で、それを更新することができます:

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が動作するビデオを追加または削除するには、paramsの1つをliより大きい値に設定する必要がありますこれにより、後のトラックのすべての位置を更新します。 – socha23

+0

うーん、これは正しいと思います、ありがとうございます! – Timothy

0

スタックアプローチ(つまり次のフィールドを使用)は良い考えではありません。プレイリストの途中にビデオを挿入する必要がある場合、次のシーンを追う必要があるからです。

最も簡単な方法は、位置フィールドを使用することです。再注文するとスタックアプローチと同じ量の情報が変更されますが、必要な計算量は大幅に減ります。

+0

再生リストの途中に動画を挿入すると、3つの「次の」属性を変更するだけで済みます: - 移動した動画自体の1つ - 以前の動画の1つ移動中の動画の前に - 移動した動画の前の動画の1つ ここに何か不足していますか? – Timothy

0

私はプレイリストを含むXMLファイル(パスとファイル名を格納する)を保存するか、DB(ユーザー、プレイリスト(id、id_user、name)、メディア(id、description、path)、x_playlists_media(id、id_playlist、id_media、position)。

関連する問題