关于《餐饮管理》数据库问题,连载

handyworkroom 2003-09-07 09:10:55
还是上次的问题(关于一个房台呈现多个状态的问题)。本人想了很多,现在有个新方案,请大家给看看,合不合适。
这次主要想的是不在room表中加status字段,而是做一个查询,去检查各表中roomid是否存在,来确定status的值,这样的话,是动态的,而且可以自动刷新。
room表,房台表
roomid name type
101 101台 小台
102 102台 大台

roomstatus表,房台的状态和它对应的表达值
status_id name value
01 空闲 0
02 预订 1
03 使用 2
04 预订+使用 3
04 禁用 4

reserve预订表,
reserve_id roomid opentime deposit linkman note
0000001 101 2003-9-7 10:00 1000 XX

nouse禁用表
nouse_id roomid starttime endtime note
0000001 102 2003-8-1 2003-9-1 XX

guest表,客人消费使用表
guest_id roomid guestname starttime endtime note
0000001 101 XX 2003-9-7 9:02 null XXXX

现在101的房台被使用着,但又被预订着,我想用上面的说明的方式去查出101房台的状态,如:reserve表中找到有关101房台的信息(roomid='101')返回1,nouse表找到有关101的就返回4,guest表找到就返回2,以上如果表中没有的,就返回0,然后把它们返回的值加到一起去,就知道它的状态了,可是上面说的sql应该怎么写呀,谢谢大家了
...全文
42 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2003-09-09
  • 打赏
  • 举报
回复
这个查询可以得到状态,但不理想,因为它不能根据你的状态表中的值去对应:
select case when exists(select 1 from reserve where roomid=@roomid and opentime>getdate()) then 1 else 0 end
+case when exists(select 1 from nouse where roomid=@roomid and tarttime<=getdate() and endtime>=getdate()) then 4 else 0 end
+ case when exists(select * from guest where roomid=@roomid and endtime is null)then 2 else 0 end
handyworkroom 2003-09-08
  • 打赏
  • 举报
回复
又陷入了迷茫之中,我发现商业软件里的预订系统还可以预点菜,可是如果按我上面说的那样,好像又不能做预点菜,
唉,,应该怎么样去设计这个数据库呀,只要有能做的,我加分,加分要多少,给多少
w_rose 2003-09-07
  • 打赏
  • 举报
回复
嘿嘿!会说话就会写SQL,循着自然语言的思路就可以了。所以我喜欢SQL,讨厌C++。
w_rose 2003-09-07
  • 打赏
  • 举报
回复
select
case when exists(select * from reserve where roomid=@roomid and
opentime>getdate())
then 1 else 0 end
+
case when exists(select * from nouse where roomid=@roomid and
starttime<=getdate() and endtime>=getdate())
then 4 else 0 end
+
case when exists(select * from guest where roomid=@roomid and
endtime is null)
then 2 else 0 end

34,875

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧