2013-02-01 32 views
1

我試圖執行這個查詢:MySQL查詢返回0行與緯度和經度搜索時小數

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

這裏的緯度和經度字段和樣品行的表結構,它應該是返回至少1排

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

Name     Lng     Lat 
Ambre Blends Studio -86.143746979607530 39.875314973898870 

然而,當我execure它不返回行上面的查詢。這裏有什麼問題?

+2

其他東西一定很有趣,因爲它[適用於SQL小提琴](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%' 

,並確保你只有一個行(你可能需要調整的where條款,如果有大量的與Ambre開始行)。

然後一次添加其他小節,直到該行不出現。第一是:

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

一旦建立條件是造成select失敗,你就可以開始尋找到爲什麼。

+0

這個問題與我最初預期的不同,我輸出Zend Framework正在創建的查詢 SELECT'venues'。* FROM'場地'WHERE'lat'> = 39.730387437667 AND'lng'> = -86.332592054637 AND' lat' <= 40.020242510131 AND'lng' <= -85.954901904578 當它通過Zend(使用PDO)執行時,它返回正確的行數,但它不起作用。 – callumcarolan