0

我有以下用于电影预订系统的伪 MySQL:

表电影:

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

表电影时间表:

    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
)

根据选择插入记录。该选择返回 2 个固定值,如果预订数量小于最大预订数量,则从返回计划 ID 的子查询中进行选择。

于 2013-08-01T08:40:04.583 回答