크로스 각 장소에 유사한 각 "사용자"와 "사용자"및 "위치"(조인 될 하나 개의 접근법 같아 사이의 거리를 계산하는 식을 통합한다. "user"lat/long과 "place"lat/long (GCD)을 비교하여 표현식의 결과를 주어진 거리 "x"와 비교하고 비교 결과에 따라 0 또는 1을 반환합니다. SUM 집계 비교에서 되돌아왔다.
SELECT p.id
, p.name
, IFNULL(SUM([gcd_expr] <= x) ,0) AS cnt
FROM place p
CROSS
JOIN user u
GROUP BY p.id
모든 사용자가 모든 장소와 일치하면 정말 큰 세트가 될 수 있습니다. 엄청나게 비쌀 수도있는 거리를 계산해야합니다. 성능 향상을 위해
, 우리는 당신은 위도 5도 내에있는 사용자를 확인하고 싶은 말은 ... 위도 및/또는 경도의 델타를 제한 Join 술어 포함 할 수있다를 ...
SELECT p.id
, p.name
, IFNULL(SUM([gcd_expr] <= x) ,0) AS cnt
FROM place p
LEFT
JOIN user u
ON u.lat-p.lat BETWEEN -5.00 AND 5.00
GROUP BY p.id
[gcd_expr]
은 Great Circle Distance 계산을 수행하는 표현식을 나타냅니다. StackOverflow에 대한 기존 질문을 검색하면 해당 질문에 대한 답변이 여러 번 나온다는 것을 알고 있습니다.
테이블 구조를 제공하여 관련성을 이해할 수 있도록해야하지만 아니요. 고리. 'join'과'count'는 여러분이 찾고있는 것입니다. – sgeddes
https://dev.mysql.com/doc/refman/5.7/en/spatial-extensions.html – Nicarus
MySQL GIS 확장에 대한 조사를 수행하십시오. –