Следующий запрос дает мне столбец расстояний. Но мне нужно только количество результатов с совпадающими расстояниями, а не сами расстояния. Подвыборку использовать нельзя.
SELECT
( 6368 * SQRT(2*(1-cos(RADIANS(loc_lat)) * cos(0.899945742869) * (sin(RADIANS(`loc_lon`)) * sin(0.14286767838) + cos(RADIANS(`loc_lon`)) * cos(0.14286767838)) - sin(RADIANS(loc_lat)) * sin(0.899945742869))) ) AS Distance
FROM ...
WHERE ...
HAVING Distance > 0 AND Distance <= 25
4
Mike
29 Авг 2011 в 18:19
3 ответа
Лучший ответ
Если вам не нужны расстояния, а только счет, возможно, это сработает:
SELECT Count(*)
FROM ...
WHERE ... AND
(6368 * SQRT(2*(1-cos(RADIANS(loc_lat)) * cos(0.899945742869) *
(sin(RADIANS(`loc_lon`)) * sin(0.14286767838) + cos(RADIANS(`loc_lon`)) *
cos(0.14286767838)) - sin(RADIANS(loc_lat)) * sin(0.899945742869)))
) BETWEEN 0 AND 25
2
Kobi
29 Авг 2011 в 14:29
Вам просто нужно переместить расчет расстояния в предложение where:
SELECT COUNT(*) FROM ...
WHERE ( 6368 * SQRT(2*(1-...) BETWEEN 0 AND 25
3
Vinay Pai
29 Авг 2011 в 14:29
Это даст totalResults, и вы можете отбросить другой столбец.
SELECT COUNT(*) totalResults,
( 6368 * SQRT(2*(1-cos(RADIANS(loc_lat)) * cos(0.899945742869) * (sin(RADIANS(`loc_lon`)) * sin(0.14286767838) + cos(RADIANS(`loc_lon`)) * cos(0.14286767838)) - sin(RADIANS(loc_lat)) * sin(0.899945742869))) ) AS Distance
FROM ...
WHERE ...
HAVING Distance > 0 AND Distance <= 25
1
ajacian81
29 Авг 2011 в 14:20
Похожие вопросы
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.