「順序付きリスト」をデータベースに保存して、更新(エントリの追加、削除、変更)を簡単に行えるようにするための最良の方法は何ですか?
ユーザーと映画のテーブルがあるデータベースについて考えてみます。各ユーザーには、お気に入りの映画のリストがあります。
多くのユーザーが同じ映画を好きになることができるので、ユーザーと映画を別々のテーブルにし、3番目のテーブルを使用してそれらを接続します。usermovies。
usermoviesには、ユーザーと映画のIDと「注文番号」が含まれています。注文番号は、ユーザー向けに映画のリストを注文するために使用されます。
たとえば、ユーザーJoshには次のリストがあります。
- プロメテウス
- メン・イン・ブラック3
- 独裁者
ユーザーのジャックは次のようなリストを持っている可能性があります。
- 独裁者
- プロメテウス
- 戦艦
- スノーホワイトとハンツマン
したがって、それらはいくつかのお気に入りを共有しますが、必ずしも同じ順序である必要はありません。
クエリを使用して、各ユーザーの映画IDのリストを取得できます。
SELECT movie_id FROM usermovies WHERE user_id =? ORDER BY order_number
次に、順序付けられたmovie_idsを使用して、別のクエリを使用して映画のリストを取得できます
SELECT name FROM movies WHERE id in (?,?,?) ORDER BY FIELD (id, ?,?,?)
したがって、クエリは機能しますが、リストの更新は非常に複雑になりました。ユーザーxの映画のリストを取得し、映画を追加し、削除し、リストの順序を簡単に変更できるように、この情報を保存するためのより良い方法はありますか?