我使用WordPress自定義字段加入,它基本上有一個meta_key
列和wp_postmeta
表meta_value
欄裏面我是用存儲meta_keys
「經度」和'緯度'meta_values
說,24.3和76.2對於一個類型爲「健身房」的post_id
。需要在SQL查詢中執行數學運算與多對同桌
現在我需要從Php查詢數據庫,從10km半徑範圍內的用戶位置查找附近的健身房。我使用下面的查詢:
SELECT
pm1.meta_value AS longitude,
pm2.meta_value AS latitude,
ACOS(SIN(RADIANS(pm2.meta_value)) * SIN(RADIANS($user_lat)) + COS(RADIANS(pm2.meta_value))
* COS(RADIANS($user_lat)) * COS(RADIANS(pm1.meta_value) - RADIANS($user_lng))) * $earth_radius AS distance
FROM `wp_postmeta` pm1
INNER JOIN `wp_postmeta` pm2 ON pm1.post_id = pm2.post_id
WHERE
pm1.meta_key = 'longitude'
AND pm2.meta_key = 'latitude'
AND ACOS(SIN(RADIANS(pm2.meta_value)) * SIN(RADIANS($user_lat)) + COS(RADIANS(pm2.meta_value))
* COS(RADIANS($user_lat)) * COS(RADIANS(pm1.meta_value) - RADIANS($user_lng))) * $earth_radius < 10
其中$user_lat
和$user_lng
是PHP變量表示用戶位置。這不起作用。語法似乎是正確的,但計算的距離不是。我從radius search with google maps and mysql得到了靈感
我在做什麼錯?
更新:上述代碼有效。我犯了一個非常愚蠢的錯誤。以上代碼對於面臨相同問題的人來說是一個很好的資源,其中longitude
和latitude
字段沒有明確定義,例如在默認的WordPress自定義字段表格佈局中。
mysql或者SQL服務器? – GurV
這是一個mysql服務器,對不起,錯了標記 –
我不認爲6371是公里。你是否得到太多或兩行? –