复杂的Mysql查询来获取信息

时间:2012-10-04 17:31:41

标签: mysql sql ruby-on-rails

我目前正在开发一个项目,我从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方法没用。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

我假设您的模型名称为Path

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

这将为您提供给定两个原点的所有目的地,而不需要复杂的mysql查询

感谢

相关问题