У меня есть две функции: одна для поиска (полнотекстовый поиск), которая возвращает лучшие совпадения, и одну для нахождения ближайшего местоположения от текущего lat/lng.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