MySQL:根据先到先得的原则分配学生中有限的席位

时间:2011-02-24 12:44:58

标签: mysql greatest-n-per-group allocation ranking

想象一所大学,学生可以通过网站在线注册课程。 每门课程可能有指定的最大入学学生人数,入学时间取决于谁先注册。 例如,在有15个可用座位的“艺术”课程中,只有通过网站首次注册该课程的15名学生才能进入。

基本上有三个MySQL表: 用户(实际上是uid作为唯一用户ID的学生) 课程(课程规格如标题和班级规模; cid(课程ID)是主键) links_users_courses(将包含三列uid,cid,reg_date,其中reg_date是一个日期时间变量,反映用户uid何时为课程cid注册)

我现在正在寻找一个MySQL解决方案来解决向用户A(uid = 100)显示的问题,不仅是他试图获得席位的所有课程的列表,这将是直截了当的

select cid,coursetitle from links_users_courses left join courses using(cid) where uid=100

但是他是否参加了一门课程,也就是说,他的时间等级是否低于每门课程指定的班级规模。

最后,他应该显示三列:课程id(cid),coursetitle和status(登记,候补名单),waitlisted意味着他的谎言超出了给定班级的门槛。

1 个答案:

答案 0 :(得分:0)

可以在一个SQL查询中完成所有操作(如果你真的想让我把它放在一起),但我不认为很多人会推荐它。我建议你需要考虑一下你的过程。您是否使用过程语言来生成输出(php,python等)?如果是这样,你可能会更好地采用更实用的方法。另一种方法,如果你想非常接近数据库,将使用VIEW来处理一些中间阶段。但是在一个SQL查询中完成所有操作可能不是可行的方法(除非,作为练习)。