0

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

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

更新のたびに実行されるクエリが多すぎるため、データベースに「位置」フィールドを追加することはお勧めできません。リスト内の次のビデオのIDを指す「次の」フィールドを考えました。これは、更新ごとに最大3つのクエリを「のみ」必要とします(右?)。

プレイリストの順序を保存するためのより良い方法はありますか?特にデータベースにある必要はありません。テキストファイルの場合もあると思います。

提案?

ありがとう!

4

3 に答える 3

2

'position'フィールドは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を大きな値にします。

于 2011-10-26T10:37:39.243 に答える
0

スタックアプローチ(つまり、次のフィールドを使用する)は、プレイリストの途中にビデオを挿入する必要がある場合は、次のフィールドを追跡する必要があるため、お勧めできません。

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

于 2011-10-26T10:40:47.840 に答える
0

ユーザーごとにディレクトリを作成し、プレイリストを含むXMLファイル(ファイルのパスと名前を保存)を保存するか、DB(users、playlists(id、id_user、name)、media(id、description)に保存すると思います。 、path)、x_playlists_media(id、id_playlist、id_media、position)。

于 2011-10-26T11:20:51.703 に答える