0
我有兩個函數,一個用於搜索(全文搜索),返回最佳匹配,另一個用於查找當前經緯度的最近位置。MySQL使用動態變量加入兩個表
最終結果將是一個搜索功能,從您所在的位置查找最近的商店。
搜索:
SELECT *,MATCH(name) AGAINST('*McDonalds*' IN BOOLEAN MODE) AS `score_name_0`, MATCH(`city`)
AGAINST('McDonalds*' IN BOOLEAN MODE) AS `score_city_0` FROM `stores`
WHERE MATCH(name) AGAINST('*McDonalds*' IN BOOLEAN MODE) OR
MATCH (`city`) AGAINST('McDonalds*' IN BOOLEAN MODE)
ORDER BY (`score_name_0` + `score_city_0`) DESC
尋找最近的:
SELECT *, (3959 * acos(cos(radians('.$lat.')) * cos(radians(lat)) * cos(radians(lng) -
radians('.$long.')) + sin(radians('.$lat.')) * sin(radians(lat)))) AS distance
FROM pinpoints
INNER JOIN stores WHERE stores.id=pinpoints.store HAVING distance < 25 ORDER BY distance
我嘗試:
SELECT *,MATCH(name) AGAINST('*McDonalds*' IN BOOLEAN MODE) AS `score_name_0`,
MATCH(`city`) AGAINST('McDonalds*' IN BOOLEAN MODE) AS `score_city_0`
FROM `stores`
JOIN pinpoints ON (3959 * acos(cos(radians(".$lat.")) * cos(radians(pinpoints.lat)) * cos(radians(pinpoints.lng) -
radians(".$long.")) + sin(radians(".$lat.")) * sin(radians(pinpoints.lat)))) AS distance
WHERE stores.id=pinpoints.id
AND MATCH(name) AGAINST('*McDonalds*' IN BOOLEAN MODE) OR
MATCH (`city`) AGAINST('McDonalds*' IN BOOLEAN MODE)
HAVING distance < 25 ORDER BY distance, (`score_namn_0` + `score_stad_0`) DESC
一直停留相當長的一段時間,似乎並不能想出一個好方式來結合他們兩個,所以它找到最接近的匹配,並相應地對其進行排序。
曾與一些修改。太好了謝謝!對不起,亂碼! – Emil