私が考えることができる最善の方法は、ジャンルと映画の間に多対多の関係を持つことです(つまり、映画には複数のジャンルがあり、1 つのジャンルが多くの映画に登場する可能性があります)。
これには、さらに 2 つのテーブルを追加する必要があります。1 つはジャンルを定義するためのもので、もう 1 つはそれらを映画に関連付けるためのものです。
genres
---------
id | name
少しトリッキーな部分は次のとおりです。
genres-movies
-------------------
movie_id | genre_id
movie_id
はテーブルからの実際の ID で、 はmovies
テーブルgenre_id
からの実際の IDgenres
です。
たとえば、ID が 1 のジャンルは でScience Fiction
、ID が 42 の映画は(私がそこで何をしHitchhiker's Guide to the Galaxy
たか見てください) です。 SF。どちらも一意ではなく、どちらも複数回出現する可能性があるため、次のことが可能であることに注意してください。42 | 1
genres-movies
movie_id
genre_id
movie_id | genre_id
---------+---------
1 | 2
1 | 3
2 | 2
3 | 1
映画のすべてのジャンルを検索するには:
SELECT `genre_id` FROM `genres-movies` WHERE `movie_id` = <ID>;
結局のところ、あなたの質問に。このアプローチでは、複数のクエリが必要で、映画からすべてのジャンルを削除してから、選択したジャンルをそれぞれ追加する必要があります。選択されていないチェックボックスはサーバーに送信されないため、これを行う必要があります(疑似コード)
DELETE FROM `genres-movies` WHERE `movie_id` = <ID>; --Remove all genres
foreach ($genres_from_checkboxes as $genre) {
INSERT INTO `genres-movies` (`movie_id`, `genre_id`) VALUES (:movie_id, :genre_id)
}
ノート!ユーザーから取得したデータを使用して、常にクエリをサニタイズします(または、準備を整えることをお勧めします!!! )。
ふぅ!それは長かったです、あなたが何かを学んだことを願っています:)