2012-04-20 13 views
0

私はプレイリスト機能を使って簡単なビデオデータベースを作成しています。そのようなプレイリストでは、ビデオはユーザが指定した順序で配置することができます。プレイリストにあるビデオの順番を保存する

だから、私はにnumber_in_playlistを割り当てたと思った。この問題は、ビデオ19がビデオ2と3の間の位置に移動した場合、その間にあるすべてのビデオのnumber_in_playlistを更新する必要があることです。

アレイとリンクされたリストが強く思い出されます。だから私は、リンクされたリストがその問題を解決すると考えました。つまり、ビデオレコードごとにprevious_video_id_in_playlistnext_video_id_in_playlistのようなものを保存します。しかし、その場合は、プレイリストにあるすべての動画を(順序どおりに)取り出す方法がわかりません。

これは以前他の人が遭遇した問題でなければならないため、標準的な推奨ソリューションがあるかどうか疑問に思っていましたか?

PS:(?私はリンクリスト溶液に対して話すと思う)私はMySQLを使用していると私は非常に短く、高速なクエリを好む

+0

「ビデオ」は「プレイリスト」と多対多の関係を持っているため、既に交差テーブルを作成しているのですが、それは正しいですか?最初に作成して、これにアプローチする方法のアイデアを提供するかもしれません。 – MarioDS

+0

'video_id'を' playlist_id'にマッピングしているテーブルがありますか?私自身の解決策は、そのマッピングテーブルに別のフィールド 'number_in_playlist'を追加することです。私はちょうど良いソリューション(更新用)があるかもしれないと思っていた。 – Ben

答えて

0

次のような何かすることはできません。

SELECT * 
FROM videos 
WHERE playlist_id = 1 
ORDER BY next_video_id_in_playlist ASC 
+0

私はそうは思わない。 – Ben

0

です通常は長すぎないリスト?書き込みパフォーマンスは問題ではありませんか?この場合、私はnumber_in_playlistソリューションを使用します。すべての書き込みで、すべての数値を基本的に更新する必要があります。

リレーショナルデータベースのリンクリストは、予期せぬ問題を引き起こすような臭いがあります。バグによって引き起こされるようなサイクル。

+0

それは本当に問題ではない、私はちょうど良いソリューションがあるかもしれないと思っていた。どうやらない。 – Ben

1

の列をとすると、の場合は、ビデオを整数で並べ替えることから始められます。プレイリスト内のアイテムを新しい位置に移動すると、新しいnumber_in_playlistの値が前と次のビデオの中間にある(多分小数)に設定されます。これにより、プレイリスト全体の並べ替えを心配する前に、非常に長い時間ビデオを移動することができます。

再シーケンシングのトリガーは、新しい計算値がエンドポイントの1つ(つまり、前または次の動画と同じ値)に等しい場合です。実用的な目的のために、これは非常にまれにしか起こらないでしょう。

関連する問題