2014-03-30 2 views
1

에 2 개 SQL 쿼리를 병합 나는 독립 실행 두 개의 SQL 쿼리를 생성하는 올바른 결과하나 하나

검색어 1

SELECT id, 
(6371 * acos(cos(radians(9.977364864079215)) * cos(radians(latitude)) * cos(radians(longitude) - radians(76.58620953448485)) + sin(radians(9.977364864079215)) * sin(radians(latitude)))) 
      AS distance 
      FROM geodata HAVING distance < 20 
      ORDER BY distance 
      LIMIT 0 , 20; 

쿼리 2

SELECT DISTINCT e.* FROM schools e 
WHERE (
    (e.type = 'preprimary') 
) 
AND(
    e.title LIKE '%government%' 
) 
LIMIT 0, 10 

내가 병합 할 첫 번째 쿼리는 두 번째 쿼리와 함께 수행되므로 반경 20KM 이내의 "정부"와 같은 제목을 가진 모든 "선입관"유형 학교를 반환해야하며 결과는 거리별로 정렬해야합니다.

어떻게 두 쿼리를 병합 할 수 있습니까? 나는 학교 테이블에서 지리 데이터 테이블을 사용하여 시도했다. 그러나 나는 나머지를 모른다. 죄송합니다. 바보 같은 질문 인 경우. 나는 SQL 세계에 상당히 익숙하다.

+0

을 2 개 쿼리 사이의 열의 #이 같은뿐만 아니라 열 형식 인 경우에는 노동 조합을 사용해야합니다. 그럴까요? –

+1

이 테이블에 외래 키가 있습니까? –

+0

@BrianDeMilia : http://tinypic.com/view.php?pic=5s305&s=8# – Mic

답변

1

이 시도 :

SELECT * 
    From (
SELECT DISTINCT e.* , 
     (6371 * acos(cos(radians(9.977364864079215)) * cos(radians(latitude)) * cos(radians(longitude) - radians(76.58620953448485)) + sin(radians(9.977364864079215)) * sin(radians(latitude))) 
     ) as distance 
    FROM schools e 
LEFT JOIN geodata g ON e.id=g.id 
WHERE (e.type = 'preprimary') 
    AND (e.title LIKE '%government%') 
) as s 
    Where s.distance < 20 
    Order by s.distance 
+0

오류 # 1054 - 'where 절'에서 알 수없는 열 'distance' – Mic

+0

지금 시도하십시오. '거리'가 계산되지 않았습니다. –

+0

이제 작동합니다. 하지만 order_by는 어떨까요? 거리가 두 번 계산되어야하므로 무거운 쿼리가 아닙니까? – Mic

2
SELECT DISTINCT school.* FROM 
(SELECT geodata.id, 
(6371 * acos(cos(radians(9.977364864079215)) * cos(radians(latitude)) * cos(radians(longitude) - radians(76.58620953448485)) + sin(radians(9.977364864079215)) * sin(radians(latitude)))) 
     AS distance ,school.* 
     FROM geodata LEFT JOIN school on geodata.id=school.id 
     WHERE 
     (school.type = 'preprimary') 
     AND(
     school.title LIKE '%government%' 
     ) 
     AND school.id IS NOT NULL 
     HAVING distance < 20)x 
ORDER BY x.distance 
     LIMIT 0 , 10; 
+0

답변을 주셔서 감사합니다. 하지만 당신이 쿼리 1에 쿼리 2에 합류했다고 생각합니다. 내가 틀렸다면 수정하십시오. 내가 필요한 것은 쿼리 2에서 쿼리 1을 조인하는 것입니다. 쿼리 2는 기본 쿼리입니다. – Mic

+0

데이터를 유지하기위한 주요 기준은 무엇입니까? Isnt 거리? – Mihai

+0

주요 질문은 "정부 선지식"학교를 찾는 것입니다. 검색은 나중에 근처에있는 학교를 찾기 위해 나중에 수정됩니다. – Mic