1

プレイリスト機能を備えた単純なビデオデータベースに取り組んでいます。このようなプレイリストでは、ユーザーが指定した順序でビデオを配置できます。

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

これで、 Array vs Linked Listを強く思い出しました。だから私はリンクされたリストがその問題を解決するだろうと思っprevious_video_id_in_playlistnext_video_id_in_playlist. ただし、その場合、プレイリストにあるすべてのビデオを (順番に) 取得する方法がわかりませんか?

これは他の人が以前に遭遇した問題に違いないので、標準的な推奨される解決策があるかどうか疑問に思っていましたか?

PS: 私は MySQL を使用しており、短くて高速なクエリを非常に好みます (これはリンク リスト ソリューションに反していると思いますか?)

4

3 に答える 3

1

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

再シーケンスのトリガーは、新しく計算された値がエンドポイントの 1 つ (つまり、前後のビデオと同じ値) に等しい場合です。実際には、ユーザーがビデオを見るよりも再シーケンスに多くの時間を費やさない限り、これは非常にまれにしか発生しません。

于 2012-04-21T19:47:06.127 に答える
0

次のようなことはできませんか?

SELECT *
FROM videos
WHERE playlist_id = 1
ORDER BY next_video_id_in_playlist ASC
于 2012-04-20T20:47:30.680 に答える
0

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

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

于 2012-04-20T20:59:21.080 に答える