2012-10-04 3 views
0

현재 프로젝트에서 일부 정보를 가져 와서 데이터베이스에 저장하고 있습니다. 테이블 구조는 다음과 같습니다.정보를 가져 오기위한 복잡한 MySQL 쿼리

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 

6 개의 행은 데모 용입니다. 나는 약 500 행의 그러한 데이터를 가지고있다. 내가 작업하고있는 응용 프로그램은 사용자에게 두 개의 원점을 제공하도록 요청할 것이고 두 가지 기점 사이의 모든 공통 대상을 사용자에게 제공 할 것입니다.

예를 들어, 사용자가 "KATL"및 "KLAX"를 출발 공항으로 입력하면 "KCLT"라는 두 가지 출처 사이에 공통 목적지가 표시됩니다.

문제를 해결하기 위해 여러 가지 방법을 시도했지만 원하는 기능을 얻을 수 없습니다. 조인과 다른 ActiveRecord 메서드를 사용하지 않으려 고 시도했습니다. 이 같은

+0

당신은 당신이 해결하기 위해 노력하고있는 코드의 적어도 골격 예를 제공 할 필요가 대답 –

+0

로 두 대상이 될 수 있습니다. 이것은 복잡해 보이지 않으므로 문제가 어디에 있는지 분명하지 않습니다. – tadman

+0

@ParitoshSingh : 나는 두 개의 원점 사이의 모든 목적지를 얻을 필요가있다. 그것은 2,3 또는 심지어 100 일 수 있습니다. 그것의 간단한 방정식은 실제로 즉 두 가지 기점의 모든 목적지입니다. – user814446

답변

1

뭔가 당신이의를 사용할 수 있습니다, 그것은 비록 당신에게 두 테이블을 줄 것이다 작동 * 또는 전자 * 특정 테이블을 선택하는 당신이 필요로하는 경우에 :..

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; 
+0

돌아오고 싶었던 것을 정확하게 돌려 줬습니다. – user814446

0

내가 경로로 모델 이름을 가정하고

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

이 당신에게 모든 이명 령을 줄 것이다 복잡한 MySQL의 쿼리없이 주어진 두 개의 기원에 대한 inations

감사

+0

이것은 작동하지 않을 수 있습니다. p는 origin2에만 속할 수 있지만 여러 항공편이있을 수 있으므로 계산 횟수가 1보다 커야합니다. 그렇지 않은 경우 일치 항목으로 반환됩니다. "Complex"쿼리는이 경우에 원하는 것입니다. 예를 들어 1,000,000 개의 경로가있는 경우 메모리에로드 할 대상을 지정하지 않고 카운트, uniq, 압축 등을 수집하여 반복합니다. – iouri

관련 문제