0

我目前正在从事一个项目,以从 API 获取一些信息并将其存储在数据库中。表结构如下所示:

id      ident aircraft_type  origin  destination  timestamp        departure_time
1      AWE1843      A321      KATL     KCLT    2012-10-04 10:46:34  2012-10-04 10:01:00 
2      ASQ5758      CRJ2      KATL     KIAD    2012-10-04 10:51:11  2012-10-04 09:40:00     
3      AAL2404      B738      KLAX     KDFW    2012-10-04 10:46:13  2012-10-04 08:23:00     
4      AAL2400      B738      KLAX     KDFW    2012-10-04 09:54:13  2012-10-04 07:31:00     
5      UAL912       B752      KLAX     KJFK    2012-10-04 10:19:24  2012-10-04 05:39:00
6      DAL1162      B752      KLAX     KCLT    2012-10-04 09:38:00  2012-10-04 04:44:30 

六行用于演示目的;我有大约 500 行这样的数据。我正在开发的应用程序将要求用户提供两个起点,并向用户提供这两个起点之间的所有共同目的地。

例如,如果用户输入“KATL”和“KLAX”作为始发机场,则查询将显示两个始发地之间的共同目的地,即“KCLT”。

我尝试了不同的方法来解决问题,但无法实现所需的功能。我尝试了连接和不同的 ActiveRecord 方法,但都没有用。

4

2 回答 2

1

像这样的东西会起作用,它会给你两个表,如果你需要,你可以使用 s.* 或 e.* 来选择特定的表:

select * from (select * from flights where origin = 'KATL') s
inner join (select * from flights where origin = 'KLAX') e
on e.destination = s.destination;

如果您只想显示目的地:

select distinct s.destination from (select * from flights where origin = 'KATL') s
inner join (select * from flights where origin = 'KLAX') e
on e.destination = s.destination;
于 2012-10-04T17:52:25.360 回答
0

我假设您的型号名称为 Path

path = Path.where("origin in (#{ORIGIN1},#{ORIGIN2})")
path.uniq.collect{ |p| p if path.count(p) > 1}.compact

这将为您提供给定两个来源的所有目的地,而无需复杂的 mysql 查询

谢谢

于 2012-10-04T18:10:58.460 回答