2011-08-29 4 views
4

다음 쿼리는 나에게 거리의 열을 가져옵니다. 하지만 필자가 필요한 것은 거리와 일치하는 거리 만의 결과입니다. Subselect는 사용할 수 없습니다.COUNT (*) 및 갖는 것

SELECT 
(6368 * SQRT(2*(1-cos(RADIANS(loc_lat)) * cos(0.899945742869) * (sin(RADIANS(`loc_lon`)) * sin(0.14286767838) + cos(RADIANS(`loc_lon`)) * cos(0.14286767838)) - sin(RADIANS(loc_lat)) * sin(0.899945742869)))) AS Distance 

FROM ... 

WHERE ... 

HAVING Distance > 0 AND Distance <= 25 
+2

질문에 'GROUP BY'를 생략 했습니까? 아니면 전혀 갖고 있지 않습니까? – Vache

+0

여기 사용하지 마십시오. – Mike

답변

2

, 어쩌면이 작동합니다 :

SELECT Count(*) 
FROM ... 
WHERE ... AND 
    (6368 * SQRT(2*(1-cos(RADIANS(loc_lat)) * cos(0.899945742869) * 
    (sin(RADIANS(`loc_lon`)) * sin(0.14286767838) + cos(RADIANS(`loc_lon`)) * 
    cos(0.14286767838)) - sin(RADIANS(loc_lat)) * sin(0.899945742869))) 
) BETWEEN 0 AND 25 
+0

감사합니다. 나는 'Between'운영자를 잊어 버렸다. – Mike

1

이렇게하면 totalResults가되며 다른 열은 버릴 수 있습니다. 당신이 거리 만 계산이 필요하지 않은 경우

SELECT COUNT(*) totalResults, 
    (6368 * SQRT(2*(1-cos(RADIANS(loc_lat)) * cos(0.899945742869) * (sin(RADIANS(`loc_lon`)) * sin(0.14286767838) + cos(RADIANS(`loc_lon`)) * cos(0.14286767838)) - sin(RADIANS(loc_lat)) * sin(0.899945742869)))) AS Distance 

    FROM ... 

    WHERE ... 

    HAVING Distance > 0 AND Distance <= 25 
+0

나는 그것을 물론 시도했다. 하지만 그것은 내 결과 세트가 공백 (즉, 0 행)이됩니다. – Mike

3

을 그냥 where 절까지의 거리 계산을 이동해야합니다

SELECT COUNT(*) FROM ... 

WHERE (6368 * SQRT(2*(1-...) BETWEEN 0 AND 25