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