我在 Postgresql 中制作了一个公共汽车预订系统,并被困在如何在预订时检查座位是不是可用

Posted

技术标签:

【中文标题】我在 Postgresql 中制作了一个公共汽车预订系统,并被困在如何在预订时检查座位是不是可用【英文标题】:Im making a bus booking system in Postgresql and got stuck on how to check if seats is available while booking我在 Postgresql 中制作了一个公共汽车预订系统,并被困在如何在预订时检查座位是否可用 【发布时间】:2020-03-16 11:33:04 【问题描述】:

如果座位数不超过巴士实际拥有的座位数,我该如何做某种声明?

现在我有以下表格: 预订(route_id,邮件,座位)--route_id 路由外键(route_id)座位=要预订的座位数

巴士(bus_id、座位、driver_ssc)

城市(国家、城市名称、巴士站、路线 ID)

司机(姓名、driver_ssc、电话、地址)

路线(dep、到达、dep_time、到达时间、价格、bus_id、route_id)

旅行者(fn、ln、电话、地址、邮件、user_id)

有些信息只是为了完成我的任务。

请就预订时如何控制座位提出建议。问我是否需要解释任何不清楚的地方。谢谢!

【问题讨论】:

如何在数据库中修复座位已被预订?现在,您只能识别每条路线的座位数。在我看来你需要一个额外的表“预订”(user_id,route_id)然后你会很容易找到一些免费的座位。 我有一个名为 Booking (route_id, mail, seat) 的表,在这种情况下,邮件标识用户。你能举个例子说明你会怎么写吗? 【参考方案1】:

我知道 1 个唯一的 route_id 只有 1 个唯一的 bus_id,对吗? 如果正确,此查询可能会对您有所帮助。

with booking_summary as (
    select 
        route_id, 
        sum(seats) as "total_book_seats"
    from
        booking
    group by route_id
)

select 
    route.route_id, 
    bus.bus_id, 
    booking_summary.total_book_seats, 
    bus.seats 
from
    booking_summary
        join route on booking_summary.route_id = route.route_id
        join bus on route.bus_id = bus.bus_id
where 
    booking_summary.total_book_seats > bus.seats

这个概念是将总预订座位计算到booking_sumary 临时表中。然后,将 temp 表连接到其他表以获得一些公共汽车座位。

【讨论】:

以上是关于我在 Postgresql 中制作了一个公共汽车预订系统,并被困在如何在预订时检查座位是不是可用的主要内容,如果未能解决你的问题,请参考以下文章

用 HTML5 画布制作一个简单的汽车游戏

为具有公共访问权限的文件上传生成预签名 URL

php ajax依赖下拉列表不从表中加载数据

在 PostgresQL 中删除角色

如何预取关系 NSManagedObject 的关系

如何在 Django Python 中使用 PostgreSQL 为 SQLAlchemy 连接池设置方言?需要启用预 ping 功能