mysql语法帮助请sql

时间:2014-01-28 20:15:38

标签: mysql

我已经制作了一个有票价的铁路数据库,现在我想要检索目的地a到b的价值或成本 - 怎么样?请帮助我检索以及如何为我的项目制作我想要的表格?我不希望代码只能帮助它。

1 个答案:

答案 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