我有如下表:結合多個MySQL查詢
id user_id recorded latitude longitude speed note_type details image_url
1 10 3/29/2013 33.77701316 -84.39004377 -1 11 Test 2ecc2e36c3e1a512d349f9b407fb281e-2013-03-29-16-15-..
我試圖找到一種方法,以下查詢成一個完整的查詢會給我符合每一個人的查詢,所有記錄組合(各這些作品精細分開只是無法弄清楚如何將它們結合起來):
SELECT id, (3959 * acos(cos(radians(User_Input_Longitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians(User_Input_Latitude)) + sin(radians(User_Input_Longitude)) * sin(radians(latitude)))) AS distance
FROM note HAVING distance < User_Input_Distance
ORDER BY distance LIMIT 0 , 1000
SELECT details
FROM note
WHERE CHAR_LENGTH(details) > User_Input_CharacterLength
SELECT DISTINCT details
FROM note;
SELECT DISTINCT image_url
FROM note;
所以基本上我需要一個比較基礎上,經度/緯度點至用戶定義的經度/緯度點和用戶定義的距離的距離查詢,檢查細節字段和字符的字符長度n最後只記錄具有不同數據的詳細信息和image_urls(很多image_urls和細節都留空,所以我一直在使用distinct來查找只有實際上有數據的用戶才能確定這是否是正確的方法) 。
就像我之前說過的,這些查詢中的每一個現在都單獨工作,但不幸的是我沒有足夠的技能在mySql中以智能方式組合它們。
對此的任何建議都會很好。
對於初學者,'HAVING distance
@lp_給出的答案涵蓋了構造MySQL查詢的正確方法。您可能還想考慮簡化'distance'子句,只需爲'bounding square'選擇一個(可能)稍大的結果集,然後在PHP中拒絕不符合更精確的極座標的結果。這樣可以減少CPU負載,並且還可以利用「經度」和「緯度」列上的索引,尤其是在表格很大的情況下。 HTH –
@GavinJackson好點。只是稍微澄清一點:你說做一個更簡單的查詢檢查距離,基本上需要一個更大的區域,然後在我的PHP文件過濾器更接近減少負載。具有意義,因爲我認爲這個查詢在計算上會很昂貴。我的表格有大約1k條目,但是您怎麼說「利用經度和緯度列上的指標」? –