В настоящее время я работаю над проектом, чтобы получить некоторую информацию из 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.
Что-то вроде этого будет работать, это даст вам обе таблицы, но вы можете использовать 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;
Я предполагаю, что ваше имя модели Path
path = Path.where("origin in (#{ORIGIN1},#{ORIGIN2})")
path.uniq.collect{ |p| p if path.count(p) > 1}.compact
это даст вам все адресаты для данного двух источников без сложного запроса mysql
благодаря