2016-11-06 77 views
0

我的代碼如下,應該可以工作,但由於某種原因它不能識別連接語句中的wm_stores.lat。有人有主意嗎?確定距離MySQL

SELECT wm_dcs.dc_id, wm_stores.store_id 
FROM wm_dcs 
JOIN wm_stores 
    ON wm_stores.lat BETWEEN wm_dcs.lat - (250.0/69.0) 
     AND wm_dcs.lat + (250.0/69.0) 
     AND wm_stores.lon BETWEEN wm_dcs.lon - (250.0/(69.0 * COS(RADIANS(wm_dcs.lat)))) 
     AND wm_dcs.lon + (250.0/(69.0 * COS(RADIANS(wm_dcs.lat)))) 
     AND (69.0 * DEGREES(ACOS(COS(RADIANS(wm_dcs.lat) * COS(RADIANS(stores.latitude)) 
      * COS(RADIANS(dc.longitude - stores.longitude)) 
      + SIN(RADIANS(dc.latitude)) 
      * SIN(RADIANS(wm_stores.lon)))))) <= 250.0; 

不同的代碼版本:

set @dc_lat = 40.811973 ; 
set @dc_lon = -73.946299 ; 

select wm_stores.store_id, 
(3959 * acos(cos(radians(@dc_lat)) * cos(radians(wm_stores.lat)) 
* cos(radians(wm_stores.lon) - radians(@dc_lon)) + sin(radians(@dc_lat)) 
* sin(radians(wm_stores.lat)))) AS distance 
from wm_stores 
having distance <= 250 
order by distance asc; 
+0

請始終包括確切的錯誤信息和表定義 –

+0

此外,您還可以給表表模式嗎?據我們所知,'wm_stores.lat'實際上並不存在 – DaveyBoy

+0

錯誤消息 - 'on子句'中的未知列'stores.latitude' –

回答

0

在查詢

SELECT wm_dcs.dc_id, wm_stores.store_id 
FROM wm_dcs 
JOIN wm_stores 
    ON wm_stores.lat BETWEEN wm_dcs.lat - (250.0/69.0) 
     AND wm_dcs.lat + (250.0/69.0) 
     AND wm_stores.lon BETWEEN wm_dcs.lon - (250.0/(69.0 * COS(RADIANS(wm_dcs.lat)))) 
     AND wm_dcs.lon + (250.0/(69.0 * COS(RADIANS(wm_dcs.lat)))) 
     AND (69.0 * DEGREES(ACOS(COS(RADIANS(wm_dcs.lat) * COS(RADIANS(stores.latitude)) 
      * COS(RADIANS(dc.longitude - stores.longitude)) 
      + SIN(RADIANS(dc.latitude)) 
      * SIN(RADIANS(wm_stores.lon)))))) <= 250.0; 

我注意到有一個像stores沒有桌子,但你已經在你的查詢中使用stores.latitudestores.longitude。可能是這是導致錯誤消息Unknown column 'stores.latitude' in 'on clause'

我建議你重新檢查代碼

AND (69.0 * DEGREES(ACOS(COS(RADIANS(wm_dcs.lat) * COS(RADIANS(stores.latitude)) 
      * COS(RADIANS(dc.longitude - stores.longitude)) 
      + SIN(RADIANS(dc.latitude)) 
      * SIN(RADIANS(wm_stores.lon)))))) <= 250.0; 
+0

謝謝!這完全是我的錯誤,我沒有引用正確的表格。另外,你會知道我怎麼能在查詢結束時顯示距離? –

+0

@ElDiablo我建議你發佈它作爲另一個問題。請參閱http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me -to-be-a-very-simple-sql-query至於如何提出一個很好的問題,以便你的文章能得到所有的關注:) –

+0

嘿,它就是這樣,我是新來的,只是想獲得一些答案。 –