【问题标题】:SQL query - need help constructingSQL 查询 - 需要帮助构建
【发布时间】:2015-12-07 10:30:13
【问题描述】:

只需要一些快速帮助来构建一个完整的菜鸟的 sql 查询。我已经复制了下面的数据库模式;

【问题讨论】:

  • 我不认为你会存储有用的东西
  • "但是,更新值时必须考虑 DDate 和 TTime。" -- 什么意思?
  • 当然,这也应该是更新而不是插入,因为当您更改其可用性时,Chair 行应该已经存在。哦,你更新/插入一个表名,即Chair
  • 我的意思是 - 我需要根据日期和时间显示座位的可用性

标签: mysql sql select insert field


【解决方案1】:

您的设计偏离目标。
Avail 属性描述的是一把普通的椅子,而不是一瞬间的椅子。想象一下,你有两场演出——一场是今天,另一场是 10 天后。人们预订了今天的节目,桌椅已更新,现在座位已被占用。现在有人也想预订后来的节目,而且……Doh,它被占用了。如果您有 100 场演出,而每场演出只有 1 位参加者,那么每场演出仍然会占用 100 把椅子。

此声明将为您提供特定节目的所有座位及其状态

select c.chair_id,
(case when b.chair_id is null then 1 else 0 end) available
from shows s
inner join booki1 b on s.show_id = b.show_id
left join chairs c on b.chair_id = c.chair_id
where s.show_id = *insert show id here*

这将为特定节目选择所有可用的椅子。
另外我建议对椅子/表演使用一些自动递增的整数 ID。 当您可以拥有 DateTime 列时,拥有两列日期/时间看起来真的很奇怪。需要一些时间来想象您实际需要的特定情况。

【讨论】:

  • 感谢您的解释 - 真的很有帮助,可以看到我偏离目标的地方。从模式中,您是否认为可以选择所有座位(无论是否已被预订),然后指出哪些座位已在我的预订系统上预订? ..理想情况下,我想用不可用和可用的座位填充我的网页,然后将不可用的座位设置为“红色”作为示例
  • 您可以在选择时派生可用/不可用,并且为此查询创建一个视图是有意义的。我会尽快更新我的答案
  • 您可以通过稍微修改查询以包含 show_id 以供以后过滤,将其制成一个视图,该视图将返回有关所有节目的所有预订的信息,或者您可以将其制成一个函数并将 show_id 传递为一个参数
  • 感谢您的帮助 - 非常感谢 - 将很快对其进行测试!
  • 嗨@evictednoise .. 刚刚尝试了查询,它没有返回任何chairno 的背部——它表明它是一个空集。我有椅子上的所有数据,而 Booki1 中没有数据.. 你能在你提供的代码中看到一个小错误吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
相关资源
最近更新 更多