我已经制作了一个有票价的铁路数据库,现在我想要检索目的地a到b的价值或成本 - 怎么样?请帮助我检索以及如何为我的项目制作我想要的表格?我不希望代码只能帮助它。
答案 0 :(得分:1)
由于我没有看到您的示例数据,但仅基于您的评论,我会做类似的事情......
select
r.cost
from
YourRailFairTable r
where
( r.fro = 'from destination'
AND r.t = 'to destination' )
OR ( r.t = 'from destination'
AND r.fro = 'to destination' )
由于我不知道你的表是如何组织的,我在where子句中有一个OR。因为有人可以从“城市A”到“城市B”或从“城市B”到“城市A”。因此,我们永远不能假设它总是处于特定的从/到订单,除非您以某种方式强制数据以alpha顺序具有目的地。这样就可以得到它的情况。只要确保你的桌子上有一个索引(来回,t)
反馈意见
我没有处理这种来自/到票务系统类型的系统,我会做以下事情。创建一个包含所有可能目标的表,并具有自动增量ID列。有另一张所有路线和费率表。真正需要更多努力的更大问题是我无法直接回答的问题......例如在航空旅行中,一个人可能想要从A市到B市,但该航空公司没有直达航班,需要从A出发到城市X到城市B.你没有任何东西将它们联系在一起所以你需要额外的逻辑来处理它。但对于铁路旅行来说,即使在某些车站有转换列车,也可能并不复杂。
CREATE TABLE Destination (
DestinationID INT NOT NULL AUTO_INCREMENT,
Destination CHAR(30) NOT NULL,
PRIMARY KEY (DestinationID),
INDEX Destination (Destination) );
那么你的价值就像是
DestinationID Destination
1 City A
2 City B
3 City ...Z
接下来,您的费率表具有来自/到达目的地和费率的ID。在这种情况下,任何插入我会强制第一个目标到较低的“ID”值,所以即使目的地名称拼写不正确并调整,内部ID也不会。
CREATE TABLE RailRates (
RailRateID INT NOT NULL AUTO_INCREMENT,
DestFrom INT,
DestTo INT,
Rate DECIMAL(7,2),
PRIMARY KEY (RailRateID),
FOREIGN KEY (DestFrom) REFERENCES Destination ( DestinationID )
ON DELETE CASCADE,
FOREIGN KEY (DestTo) REFERENCES Destination ( DestinationID )
ON DELETE CASCADE,
INDEX FromTo( DestFrom, DestTo) );
费率表的示例数据
RailRateID DestFrom DestTo Rate
1 1 2 123.45
2 1 3 145.67
3 1 9 287.42
4 1 14 321.93
5 2 3 46.82
6 2 9 187.18
7 etc...
然后,你会提示用户从/到位置,获取他们的ID并将它们按低/高顺序排列,因为从/到哪个无关紧要并更新查询
select
r.Rate
from
RailRates r
where
r.FromDest = lowIDNumberOfOneLocation
AND r.ToDest = highIDNumberOfOtherLocation