2013-02-01 5 views
1

십진수 : 여기 MySQL의 쿼리 나는이 쿼리를 실행하기 위해 노력하고있어

SELECT `venues` . * 
FROM `venues` 
WHERE `lat` >= 39.847991180331 
AND `lng` >= -86.332592054637 
AND `lat` <= 40.137846252794 
AND `lng` <= -85.954901904578 
LIMIT 0 , 30 

는 위도와 LNG 필드와 샘플 행의 테이블 구조를, 그것은해야 최소 1 행을 반환합니다.

lng decimal(65,15)        
lat decimal(65,15) 

Name     Lng     Lat 
Ambre Blends Studio -86.143746979607530 39.875314973898870 

그러나 위 쿼리를 실행하면 행이 반환되지 않습니다. 여기서 뭐가 문제 야?

+2

[SQL Fiddle에서 작동하는] 뭔가 다른 것이 재미 있어야합니다. (http://www.sqlfiddle.com/#!2/d8245/1) –

+0

그 밖의 재미있는 것은 무엇일까요? 그것은 내 질문에있는 것 이외에 다른 것에 의존하지 않습니다. – callumcarolan

+0

확인하기 만하면 [MySQL 5.1.61] (http://www.sqlfiddle.com/#!8/d8245/1)에서도 작동합니다. 당신이 가지고있는 버전의 버그인지 확실하지 않습니다. –

답변

0

나는 부동 소수점 평등과 불평등 연산에 대해 항상 경계하고 있으며 MySQL은 과거 이런 종류의 문제로 과거의 문제를 가지고있었습니다 (어떤 버전을 사용하고 있는지 확실하지 않지만 약간의 변경이있었습니다 약 503/505).

내가 할 첫 번째 일은 실제 진술을 디버깅하는 것입니다. 시작 :

select venues.* from venues 
where name like 'Ambre%' 

을하고 하나 개의 행을 얻을 수 있도록 (당신이 Ambre로 시작하는 행을 많이있을 경우 where 절을 조정할 수있다).

그런 다음 행이 표시되지 않을 때까지 한 번에 하나씩 다른 하위 절을 추가하십시오. 첫 번째는 다음과 같습니다

select venues.* from venues 
where name like 'Ambre%' 
    and lat >= 39.847991180331 

당신이 조건이 select 실패의 원인이 확립되면, 당신은 이유를 조사 시작할 수 있습니다.

+0

문제는 내가 원래 예상했던 것과 다르다. 젠드 프레임 워크가 생성하는 쿼리를 출력하고있다. SELECT'venues'. * FROM'venues' WHAT'lat'> = 39.730387437667 AND'lng'> = -86.332592054637 AND' lat'<= 40.020242510131 AND'lng' <= -85.954901904578 Zend (PDO 사용)를 통해 실행될 때 올바른 행 수를 반환하지만 작동하지 않습니다. – callumcarolan

관련 문제