0

映画予約システム用に次の疑似 MySQL があります。

テーブルムービー:

    id int auto_increment not null,
    name varchar(100) not null,
    .....

テーブル MovieSched:

    movie_id foreign key refers to Movie,
    sched_id int auto increment,
    date & time,
    max_size

表 MovieSchedSignUp:

    sched_id,
    user_id 

すべての映画スケジュールには、サインアップできるユーザーの max_size があります。ユーザーを登録するには、MovieSchedSignUp に行を挿入します。

問題は次のとおりです。スケジュールが「オーバーブッキング」されないようにしながら、MovieSchedSignUp に行を挿入するにはどうすればよいですか (サインアップ数 <= max_size)。

具体的には、ユーザーをスケジュールに登録するには、どのようなクエリを使用する必要がありますか? また、スケジュールがいっぱいかどうかを確認するにはどうすればよいですか (登録が成功したかどうかをユーザーに伝えることができます)。これらには、ある種のアトミック操作、おそらくトランザクションが必要であることに注意してください。

これを行うための最も効率的な方法は何ですか?

4

1 に答える 1

0

SQLの大まかなアイデア:-

INSERT INTO Table MovieSchedSignUp (sched_id, user_id)
SELECT '$move_sched_id', '$user_id'
FROM 
(
    SELECT sched_id, COUNT(*) AS BookingCount
    FROM MovieSchedSignUp
    WHERE sched_id = '$move_sched_id'
    GROUP BY sched_id
    HAVING BookingCount < $max_size
)

選択に基づいてレコードを挿入します。select は 2 つの固定値を返し、予約数が予約の最大数より少ない場合にスケジュール ID を返すサブクエリから選択します。

于 2013-08-01T08:40:04.583 に答える