车次信息 表:
车次 站次 站名
D5583 1 上海南
D5583 2 嘉兴
D5583 3 杭州东
D5583 4 绍兴
D5583 5 上虞
D5583 6 余姚
D5583 7 宁波座位 表:
车次 起始站 终点站 座位号
D5583 上海南 余姚 1设计界面有 起始站 终点站 的下拉菜单 Dr1 和 Dr2 车次 T1
座位表上的所有信息是预定完车票后更新上去的这里都假设是同一个座位同1车厢的目的是:A如买了该车次该座位的 上海南 到 余姚的票 ,然后我要的是该座位在 起始站 终点站变化的情况下给出已经预定的车票.问题是:当A买了上海南到余姚的,那么B如要买绍兴到宁波,则把A的座位号归结为已定的车票,查询出来;如B买的是 余姚到宁波的 那么与A的没冲突,则A的座位号不被查询出来。
我的思路是: "select 座位号 from 座位 where (select 站次 from 车次信息 where 站名='"+Dr1.text+"')<(select 站次 from 车次信息 where 站名=(select 终点站 from 座位 where and 车次=T1.TEXT))"这里只是一部分~目的是 用预定起始站和已定起始站和终点站比较 以及 用预定终点站和已定起始站和终点站比较 有1个符合则表现为该车票已售。
车次 站次 站名
D5583 1 上海南
D5583 2 嘉兴
D5583 3 杭州东
D5583 4 绍兴
D5583 5 上虞
D5583 6 余姚
D5583 7 宁波座位 表:
车次 起始站 终点站 座位号
D5583 上海南 余姚 1设计界面有 起始站 终点站 的下拉菜单 Dr1 和 Dr2 车次 T1
座位表上的所有信息是预定完车票后更新上去的这里都假设是同一个座位同1车厢的目的是:A如买了该车次该座位的 上海南 到 余姚的票 ,然后我要的是该座位在 起始站 终点站变化的情况下给出已经预定的车票.问题是:当A买了上海南到余姚的,那么B如要买绍兴到宁波,则把A的座位号归结为已定的车票,查询出来;如B买的是 余姚到宁波的 那么与A的没冲突,则A的座位号不被查询出来。
我的思路是: "select 座位号 from 座位 where (select 站次 from 车次信息 where 站名='"+Dr1.text+"')<(select 站次 from 车次信息 where 站名=(select 终点站 from 座位 where and 车次=T1.TEXT))"这里只是一部分~目的是 用预定起始站和已定起始站和终点站比较 以及 用预定终点站和已定起始站和终点站比较 有1个符合则表现为该车票已售。
select 座位 from 售出表
where (车次=c1) and 经过站点ID in (客人起始站ID, 客人起始站ID+1, .... 客人到站ID)这样就查出了已售出的座位。 如果要显示未售出的座位,则在内存中遍历每个座位是不是在这个售出集合中,不用再从数据库里取,以提高性能。
UP
考虑用站次的大小比较
(1)起点站和终点站的下拉列表绑定数据库时,将Value字段绑定到站次字段上,显示的字段是站名,这样选择后SelectedValue属性就是站次的值,不需要再从数据库中查询了。
(2)建立一个视图,形成如下结构:
座位视图:
车次 起始站 终点站 座位号 起点站次 终点站次
D5583 上海南 余姚 1 1 6
这样站次也不用查了。
(3)string strSql = "select 座位号 from 座位 where 车次=" + T1.Text;
strSql += " and (("+ Dr1.SelectedValue + "> 座位视图.起点站次 and " + Dr1.SelectedValue + "<座位视图.终点站次)";
strSql += " or ("+ Dr2.SelectedValue + "> 座位视图.起点站次 and " + Dr2.SelectedValue + "<座位视图.终点站次))";